离散图论
程序员文章站
2022-05-27 15:17:54
...
**题目:**用程序实现图论中的4*5的行列关系矩阵。
#include<stdio.h>
#include<windows.h>
void goutu(int a[4][5])//能否构成图函数
{
int i,m=0,n=0,l=0,k=0,p=0;
for(i=0;i<4;i++)
{
//构成图概念就是每一列相加的值为2,所以定义五个数得到每一列的值
m=m+a[i][0];
n=n+a[i][1];
l=l+a[i][2];
k=k+a[i][3];
p=p+a[i][4];
}
//加入是否为2的判断
if(m==2&&n==2&&l==2&&k==2&&p==2)
{
printf("能构成图\n");
}
else
{
printf("不能构成图\n");
}
}
void jiandan(int a[4][5])//简单图函数
{
//简单图就是没有环和平行边
int i,j,r=0,R;
for(i=0;i<4;i++)
{
for(j=0;j<5;j++)
{
if(a[i][j]==2)//在关系矩阵中2就代表环
{
printf("有环\n");
r=1;
break;
}
}
if(r)
{
break;
}
}
R=pingxing(a);//调用平行边函数
if(!(r&&R))//判断是否为简单图
{
printf("是简单图\n");
}
else
{
printf("不是简单图\n");
}
}
void guli(int a[4][5])//孤立点函数
{
//孤立点就是一横行加起来的值为0
int m=0,l=0,n=0,i=0,j;
for(j=0;j<5;j++)
{
m=m+a[0][j];
l=l+a[1][j];
n=n+a[2][j];
i=i+a[3][j];
}
if(m==0||l==0||n==0||i==0)
{
printf("有孤立点\n");
}
else
{
printf("无孤立点\n");
}
}
void zuidadu(int a[4][5])//最大度函数
{
//最大度就是每一行分别加起来的最大数
int j,i=0,m=0,n=0,l=0,max=0;
for(j=0;j<5;j++)
{
m=m+a[0][j];
l=l+a[1][j];
n=n+a[2][j];
i=i+a[3][j];
}
//用打擂台的方法
if(m>max)
{
max=m;
}
if(l>max)
{
max=l;
}
if(n>max)
{
max=n;
}
if(i>max)
{
max=i;
}
printf("最大度为:%d\n",max);
}
int pingxing(int a[4][5])//平行边函数
{
//平行边就是有两列的数是一样的,就是平行边
int i,j,k,m,n,l;
for(i=0;i<4;i++)
{
for(j=i+1;j<5;j++)
{
if(a[0][i]==a[0][j])
{
m=i;
n=j;
}
}
}
for(i=0;i<4;i++)
{
if(a[i][m]==a[i][n])
{
return 1;
}
else
{
return 0;
}
}
}
void main()
{
int a[4][5]={{0,1,1,1,1},{0,0,1,0,1},{1,1,0,0,0},{1,0,0,1,0}};//为了方便调试,定义一个4*5的二维数组
int i,j,k;
//遇到具体问题时改用for循环输入二维数组
//for(i=0;i<4;i++)
//{
// for(j=0;j<5;j++)
// {
// scanf("%d",&a[i][j]);
// }
//}
goutu(a);
jiandan(a);
guli(a);
zuidadu(a);
system("pause");
}
上一篇: 1026. 程序运行时间