欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

离散图论

程序员文章站 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");
}
相关标签: 离散