图about连通性,简单路径,深搜,广搜。

前端之家收集整理的这篇文章主要介绍了图about连通性,简单路径,深搜,广搜。前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

星期三又要考试啦,今天来复习下,嘿嘿~

图中两个顶点之间的简单路径

  1. #include<stdio.h>
  2. #include<string.h>
  3. int m,n,a[100][100],v[100],s[100],top,ve,vb,flag;
  4. void dfs()
  5. {
  6. int i,j,temp;
  7. if(flag)
  8. {
  9. if(s[top]==ve)
  10. {
  11. for(j=1;j<=top;j++)
  12. printf("%d",s[j]);
  13. flag=0;
  14. }
  15. if(v[s[top]]==0)
  16. {
  17. v[s[top]]=1;
  18. temp=s[top];
  19. for(i=1;i<=m;i++)
  20. {
  21. if(v[i]==0&&a[temp][i]==1)
  22. {
  23. s[++top]=i;
  24. dfs();//递归;
  25. top--;
  26. }
  27. }
  28. }
  29. }
  30. }//深搜;
  31. int main()
  32. {
  33. int i,k,p,q,b,cas=1;
  34. while(scanf("%d%d",&m,&n)!=EOF)
  35. {
  36. memset(a,sizeof(a));
  37. for(i=0;i<n;i++)
  38. {
  39. scanf("%d%d",&p,&q);
  40. a[p][q]=1;a[q][p]=1;
  41. }
  42. scanf("%d",&k);
  43. printf("Case %d:\n",cas++);
  44. while(k--)
  45. {
  46. scanf("%d%d",&vb,&ve);
  47. top=1;s[top]=vb;
  48. memset(v,sizeof(v));//做标记
  49. flag=1;
  50. dfs();
  51. printf("\n");
  52. }
  53. }
  54. }


图的连通性:

  1. #include<stdio.h>
  2. #include<string.h>
  3. int m,z;
  4. void dfs()
  5. {
  6. int i,temp,v[100]={0};
  7. top=1;s[top]=1;
  8. while(top>0)
  9. {
  10. if(v[s[top]]==0)
  11. {
  12. v[s[top]]=1;
  13. temp=s[top];
  14. z++;
  15. for(i=1;i<=m;i++)
  16. {
  17. if(a[temp][i]==1&&v[i]==0)
  18. s[++top]=i;
  19. }//找出连接的点。
  20. }
  21. else top--;
  22. }
  23. }//深搜;
  24. int main()
  25. {
  26. int i,q;
  27. while(scanf("%d%d",&n)!=EOF)
  28. {
  29. if(m==0&&n==0)break;
  30. memset(a,&q);
  31. a[p][q]=1;a[q][p]=1;
  32. }
  33. z=0;
  34. dfs();
  35. if(z==m)
  36. printf("Connected graph\n");
  37. else printf("Unconnected graph\n");
  38. }
  39. }

用的是图的深搜+累计搜到的点。

猜你在找的VB相关文章