Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 工程数学软件 > MATLAB论坛
MATLAB论坛 一切MATLAB相关问题在此讨论。
回复
 
主题工具 显示模式
旧 2012-04-11, 18:14   #1
CHENHANDE
初级会员
 
注册日期: 2012-04-11
年龄: 36
帖子: 3
声望力: 0
CHENHANDE 正向着好的方向发展
默认 C语言转换成matlab

如题,请高手帮帮忙,感激不尽
#include "stdio.h"
#include "string.h"
#define N 50
int jisuan(int a[N][N][N],int h,int z,int i,int j);
void micifang(int a[N][N][N],int h,int t);
void buer(int a[N][N][N],int h);
void warshall(int a[N][N][N],int h);
main()
{
int i,h,j,t;
int a[N][N][N];
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[0][i][j]);
}
printf("\n邻接矩阵A为:\n");
for(i=0;i<h;i++)
{
for(j=0;j<h;j++)
printf(" %d ",a[0][i][j]);
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[0][i][j]);
printf("\n");
}
micifang(a,h,2);
for(i=0;i<h;i++)
for(j=0;j<h;j++)
a[h][i][j]=0; //全部赋值为0!
for(i=0;i<h;i++)
for(j=0;j<h;j++)
for(t=0;t<h;t++)
a[h][i][j]=a[h][i][j]+a[t][i][j];
printf("\n\nB的值如下:\n");
for(i=0;i<h;i++)
{
for(j=0;j<h;j++)
printf(" %d ",a[h][i][j]);
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[0][i][j]>1)
a[0][i][j]=1;
printf(" %d ",a[0][i][j]);
}
printf("\n");
}
buer(a,h,2);
printf("\n\nP的值如下:\n");
for(i=0;i<h;i++)
{
for(j=0;j<h;j++)
{
if(a[h][i][j]>1)
a[h][i][j]=1;
printf(" %d ",a[h][i][j]);
}
printf("\n");
}
printf("\n\n\nwarshall算法:\n\n");

for(i=0;i<h;i++) //处理邻接矩阵A.转化成可达矩阵。
for(j=0;j<h;j++)
if(a[0][i][j]!=0)
a[0][i][j]=1;
printf("整理后的可达矩阵为:\n");
for(i=0;i<h;i++)
{
for(j=0;j<h;j++)
printf(" %d ",a[0][i][j]);
printf("\n");
}
warshall(a,h);
getch();
}
int jisuan(int a[N][N][N],int h,int z,int i,int j)
{
int s,jg=0;
if(z==2)
for(s=0;s<h;s++)
jg=jg+a[z-2][i][s]*a[z-2][s][j];
else
for(s=0;s<h;s++)
jg=jg+a[z-2][i][s]*a[0][s][j];
return jg;
}
void micifang(int a[N][N][N],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[z-1][i][j]=0; //全部赋值为0!
for(i=0;i<h;i++)
for(j=0;j<h;j++)
a[z-1][i][j]=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[z-1][i][j]);
printf("\n");
}
micifang(a,h,++z);
}
}
void buer(int a[N][N][N],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[z-1][i][j]=0; //全部赋值为0!
for(i=0;i<h;i++)
for(j=0;j<h;j++)
a[z-1][i][j]=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[z-1][i][j]>1)
a[z-1][i][j]=1;
printf(" %d ",a[z-1][i][j]);
}
printf("\n");
}
buer(a,h,++z);
}
}
void warshall(int a[N][N][N],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[0][i][j]==1)
{
for(s=0;s<h;s++)
{
a[0][i][s]=a[0][i][s]+a[0][j][s];
if(a[0][i][s]==2)
a[0][i][s]=1;
}
printf("\n第%d次运算的结果如下:\n",++r);
for(p=0;p<h;p++)
{
for(q=0;q<h;q++)
printf(" %d ",a[0][p][q]);
printf("\n");
}
}
}
CHENHANDE 当前离线   回复时引用此帖
回复


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码



所有时间均为北京时间。现在的时间是 16:15


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.