标题:三元组转制问题
只看楼主
minqda
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-4-10
 问题点数:0 回复次数:1 
三元组转制问题
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<time.h>
#define OK 1
#define MAXSIZE 100
typedef int Status;
typedef  int  ElemType;
int c[2],g=0;
int d[100],f[100];//接受随即产生的三元组中i值,j值。
#define FALSE 0                                                                                                                             
typedef struct{
     int i,j;
    ElemType e;
}Triple;

typedef struct{
    Triple data[MAXSIZE+1];
     int mu,nu,tu;
}TSMatrix;

Status cre(TSMatrix &M,int g)//判断随即产生的三元组是否已经产生过
{   
    int h,q,flag=0;
    for(h=0;h<g-1;h++)        
    {   
        for(q=h+1;q<g;q++)
        {
            if(d[h]==d[q]&&f[h]==f[q])
            {
                  d[q]=c[0]=rand()%M.mu;
                f[q]=c[1]=rand()%M.nu;
                cre(M,g);
            }
        }
    }
    return OK;
}

Status print(TSMatrix &M)//打印原三元组产生的矩阵
{
    int a,b,k,flag;
    for(a=0;a<M.mu;a++)
    {
        for(b=0;b<M.nu;b++)   
        {
            flag=0;
            for(k=1;k<=M.data[0].e;k++)     
            {
                if(a==M.data[k].i&&b==M.data[k].j)
                {
                    printf("%5d",M.data[k].e);   
                    flag=1;
                    break;
                }
            }
            if(flag==0)
              printf("%5d",0);
         }   
        printf("\n");
    }
    return OK;
}

Status Input(TSMatrix &M,int m,int n)   //输入m行n列的矩阵存储到三元组表M中
{   
    int k,x,h;
    printf("请输入矩阵的行数和列数:");
    scanf("%d%d",&M.mu,&M.nu);
    M.data[0].i=M.mu;
    M.data[0].j=M.nu;
     printf("输入非零元素的个数tu:");
    scanf("%d",&M.tu);
    srand((unsigned)time(0));
    M.data[0].e=M.tu;
    for(k=1;k<=M.tu;k++)
     {
        c[0]=d[g]=m=rand()%M.mu;        
        c[1]=f[g]=n=rand()%M.nu;
        g++;
        if(k>1)      
            cre(M,g);   
        x=rand()%100+1;
        M.data[k].i=c[0];
        M.data[k].j=c[1];
        M.data[k].e=x;
    }
    printf("随即生成的三元组为:\n");
    for(k=1;k<=M.tu;k++)
    {
        printf("%3d%3d%3d\n",M.data[k].i,M.data[k].j,M.data[k].e);
    }   
    printf("化为矩阵为:\n");
    print(M);
     return  OK;
}

Status Transpose(TSMatrix M,TSMatrix &T)//将M转置为T
{
    T.mu=M.nu;T.nu=M.mu;T.tu=M.tu;
     int col,t,p,q;  
    int num[10];  
    int cpot[10];
    if(T.tu)
    {
        for(col=1;col<=M.nu;col++)
            num[col]=0;  //表示矩阵M种第col列中非零元素个数
        for(t=1;t<=M.tu;t++)
            num[M.data[t].j]++;//求M中每一列含非零元的个数
        cpot[1]=1;//cpot[col]表示M中第col列第一个非零元素在T.data中的恰当位置
        for(col=2;col<=M.nu;col++)
            cpot[col]=cpot[col-1]+num[col-1];
        for(p=1;p<=M.tu;p++)
        {
            col=M.data[p].j;
            q=cpot[col];
            T.data[q].i=M.data[p].j;
            T.data[q].j=M.data[p].i;
            T.data[q].e=M.data[p].e;
            cpot[col]++;
        }//for语句
    }//if语句
    return OK;
}

Status Output(TSMatrix &T)//打印T对应的矩阵形式
{
    int i,j,k,flag;
    for(i=1;i<=T.mu;i++)
    {
        for(j=1;j<=T.nu;j++)
        {
            flag=0;
            for(k=1;k<=T.data[0].e;k++)
            {
                if(T.data[k].i==i&&T.data[k].j==j)
                {
                    printf("%3d\n:",T.data[k].e);
                    flag=1;
                }
            }
            if(flag==0)
                printf("%3d",0);
        }
        printf("\n");
    }
    return OK;
}

void main()
{
    TSMatrix M,T;
    int m=0,n=0;
    Input(M,m,n);//产生原矩阵并打印
    Transpose(M,T);//转制
    Output(T);//输出
}
 
     
   不知道哪里错了 如果屏蔽掉主函数的Transpose和output函数 运行是对的 但是一加上就错了。
  求解~0rz。
  
搜索更多相关主题的帖子: 三元 转制 
2010-11-20 19:38
minqda
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-4-10
得分:0 
..........为什么没人气- -
2010-11-24 13:28



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-326358-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014309 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved