chenhande 发表于 2012-4-11 18:03

求教高手啊,C语言改matlab。帮帮忙,感激不尽

#include "stdio.h"
#include "string.h"
#define N 50
int jisuan(int a,int h,int z,int i,int j);
void micifang(int a,int h,int t);
void buer(int a,int h);
void warshall(int a,int h);
main()
{
int i,h,j,t;
int a;
printf("请输入邻接矩阵A的行数(或列数):\n");
scanf("%d",&h);
printf("\n请输入邻接矩阵A:\n\n");
for(i=0;i<h;i++)
{
printf("请输入邻接矩阵A的第%d行.\n",i+1);
for(j=0;j<h;j++)
scanf("%d",&a);
}
printf("\n邻接矩阵A为:\n");
for(i=0;i<h;i++)
{
for(j=0;j<h;j++)
printf(" %d ",a);
printf("\n");
}
printf("\n\n\n算法一:\n");
printf("\n矩阵A的1次方为:\n");
for(i=0;i<h;i++)
{
for(j=0;j<h;j++)
printf(" %d ",a);
printf("\n");
}
micifang(a,h,2);
for(i=0;i<h;i++)
for(j=0;j<h;j++)
a=0; //全部赋值为0!
for(i=0;i<h;i++)
for(j=0;j<h;j++)
for(t=0;t<h;t++)
a=a+a;
printf("\n\nB的值如下:\n");
for(i=0;i<h;i++)
{
for(j=0;j<h;j++)
printf(" %d ",a);
printf("\n");
}
printf("\n\n\n算法二:\n");
printf("\n矩阵A的1次布尔幂次方为:\n");
for(i=0;i<h;i++)
{
for(j=0;j<h;j++)
{
if(a>1)
a=1;
printf(" %d ",a);
}
printf("\n");
}
buer(a,h,2);
printf("\n\nP的值如下:\n");
for(i=0;i<h;i++)
{
for(j=0;j<h;j++)
{
if(a>1)
a=1;
printf(" %d ",a);
}
printf("\n");
}
printf("\n\n\nwarshall算法:\n\n");

for(i=0;i<h;i++) //处理邻接矩阵A.转化成可达矩阵。
for(j=0;j<h;j++)
if(a!=0)
a=1;
printf("整理后的可达矩阵为:\n");
for(i=0;i<h;i++)
{
for(j=0;j<h;j++)
printf(" %d ",a);
printf("\n");
}
warshall(a,h);
getch();
}
int jisuan(int a,int h,int z,int i,int j)
{
int s,jg=0;
if(z==2)
for(s=0;s<h;s++)
jg=jg+a*a;
else
for(s=0;s<h;s++)
jg=jg+a*a;
return jg;
}
void micifang(int a,int h,int t)
{
int i,j,s=0;
int z=t;
if(z<h) //矩阵的值不全为零。
{
for(i=0;i<h;i++)
for(j=0;j<h;j++)
a=0; //全部赋值为0!
for(i=0;i<h;i++)
for(j=0;j<h;j++)
a=jisuan(a,h,z,i,j);
printf("\n矩阵A的%d次方为:\n",z);
for(i=0;i<h;i++)
{
for(j=0;j<h;j++)
printf(" %d ",a);
printf("\n");
}
micifang(a,h,++z);
}
}
void buer(int a,int h,int t)
{
int i,j,s=0;
int z=t;
if(z<h) //矩阵的值不全为零。
{
for(i=0;i<h;i++)
for(j=0;j<h;j++)
a=0; //全部赋值为0!
for(i=0;i<h;i++)
for(j=0;j<h;j++)
a=jisuan(a,h,z,i,j);
printf("\n矩阵A的%d次布尔幂次方为:\n",z);
for(i=0;i<h;i++)
{
for(j=0;j<h;j++)
{
if(a>1)
a=1;
printf(" %d ",a);
}
printf("\n");
}
buer(a,h,++z);
}
}
void warshall(int a,int h)
{
int i,j,p,q,r=0,s;
for(j=0;j<h;j++)
for(i=0;i<h;i++)
if(i!=j && a==1)
{
for(s=0;s<h;s++)
{
a=a+a;
if(a==2)
a=1;
}
printf("\n第%d次运算的结果如下:\n",++r);
for(p=0;p<h;p++)
{
for(q=0;q<h;q++)
printf(" %d ",a);
printf("\n");
}
}
}

lizhaowei1990 发表于 2012-4-11 20:25

先点一点这个是要干什么?
页: [1]
查看完整版本: 求教高手啊,C语言改matlab。帮帮忙,感激不尽