- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
 - 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
 - 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
 
                        查看更多
                        
                    
                应用图论作业汇编
                    第一题:自动生成图的邻接矩阵
算法:我们首先从键盘上获取图的定点数和边数;根据定点数生成矩阵,把矩阵的初始值全部赋予0;在通过从第一条边开始循环,看边与定点的相联的编号,由于如果与g[i][j]想连接赋值为1,同时把g[j][i]赋值也为1;其他的全部保持默认的值,这样我们就可以得到邻居矩阵。
 
#include stdio.h
int main()
{
  int i,j,t;
  int a,b;
  int g[50][50]={0,0};
  printf(请输入图的定点数和边数: );
  scanf(%d%d,a,b);
  for(i=1;i=a;i++)
  for(j=1;j=a;j++) g[i][j]=0;
  for(t=1;t=b;t++)
		  {
			printf(请输入两个连接定点编号: );
			scanf(%d %d,i,j);
			g[i][j]=1;
			g[j][i]=1;
		  }
  for(i=1;i=a;i++)
  {
    for(j=1;j=a;j++)
	{
		printf(%3d,g[i][j]);
	}
	printf(\n);
  }
  return (0);
}
 
第二题:生成关联矩阵
算法:通过键盘中输入的边的条数和点的个数,我们生成一个矩阵,初始值我们全部赋0。然后通过从提一条边开始循环,循环一条边时候,我们输入与边连接的两个顶点的序列,然后我们在对定点循环,如果输入的点的序列等于循环的点的序列就对这个坐标位置赋1,通过这两个for循环,我们就可以自动生成关联矩阵。
 
#includestdio.h
int main()
{
  int g[50][50];
  int i,j,k,a,b;
  int m,n;
  printf(请输入边数和定点数:);
  scanf(%d%d,a,b);
  for(i=1;i=a;i++)
	  {
	   printf(请输入与%d边相联的连个定点,i);
	   scanf(%d%d,m,n);
		   for(j=1;j=b;j++)
		   {
			   if(j==m) g[i][j]=1;
			   else if(j==n) g[i][j]=1;
			   else g[i][j]=0;
		   }
	  }
  for(i=1;i=a;i++)
  {
	  for(j=1;j=b;j++)
		  printf(%4d,g[i][j]);
	      printf(\n);
  } 
   return 0;
 }
 
第三题;邻接矩阵转换成关联矩阵
算法:邻居矩阵我们按照第一题的思路一样生成,我们在定义一个矩阵l,我们对邻接矩阵的每个定点进行循环,从第一个定点i开始,如果检测到该定点与另个定点j连接,我们就对矩阵l赋值,l[f][j]赋值为1;同时由于对称性,我们同时对l[j][i]赋值为1;这样我们就完成了邻接矩阵到关联矩阵的自动转换。
 
#includestdio.h
int main()
{
 int i,j,k,a,b,m,n;
 int f=1;
 int g[50][50];
 int l[50][50]={0};
 printf(请输入定点数目和边数:);
 scanf(%d%d,a,b);
 for(i=1;i=a;i++)
	 {
		 for(j=1;j=a;j++)
			 g[i][j]=0;
	 }
 for(k=1;k=b;k++)
	 {
	  printf(请输入与%d边连接点的位置:,k);
	  scanf(%d%d,m,n);
	  g[m][n]=1;
	  g[n][m]=1;
	 }
 for(i=1;i=a;i++)
 {
   for(j=1;j=a;j++)
   {
     if(g[i][j]==1)
		 {
		 l[i][f]=l[f][i]=1;
		  f++;
		 }
   }
 }
 printf(输出邻接矩阵:);
 printf(\n);
 for(i=1;i=a;i++)
 {
   for(j=1;j=a;j++)
	   printf(%4d,g[i][j]);
   printf(\n);
 }
 printf(\n);
 
 printf(输出关联举证:);
 printf(\n);
 for(i=1;i=b;i++)
 {
   for(j=1;j=a;j++)
	   printf(%4d,l[i][j]);
   printf(\n);
 }
 return 0;
}
    
第四题:判断是否为连通图:
算法:从键盘上获取a的邻接矩阵,然后我们通过m步转移的到转移矩
                
原创力文档
                        

文档评论(0)