星期三又要考试啦,今天来复习下,嘿嘿~
- #include<stdio.h>
- #include<string.h>
- int m,n,a[100][100],v[100],s[100],top,ve,vb,flag;
- void dfs()
- {
- int i,j,temp;
- if(flag)
- {
- if(s[top]==ve)
- {
- for(j=1;j<=top;j++)
- printf("%d",s[j]);
- flag=0;
- }
- if(v[s[top]]==0)
- {
- v[s[top]]=1;
- temp=s[top];
- for(i=1;i<=m;i++)
- {
- if(v[i]==0&&a[temp][i]==1)
- {
- s[++top]=i;
- dfs();//递归;
- top--;
- }
- }
- }
- }
- }//深搜;
- int main()
- {
- int i,k,p,q,b,cas=1;
- while(scanf("%d%d",&m,&n)!=EOF)
- {
- memset(a,sizeof(a));
- for(i=0;i<n;i++)
- {
- scanf("%d%d",&p,&q);
- a[p][q]=1;a[q][p]=1;
- }
- scanf("%d",&k);
- printf("Case %d:\n",cas++);
- while(k--)
- {
- scanf("%d%d",&vb,&ve);
- top=1;s[top]=vb;
- memset(v,sizeof(v));//做标记;
- flag=1;
- dfs();
- printf("\n");
- }
- }
- }
- #include<stdio.h>
- #include<string.h>
- int m,z;
- void dfs()
- {
- int i,temp,v[100]={0};
- top=1;s[top]=1;
- while(top>0)
- {
- if(v[s[top]]==0)
- {
- v[s[top]]=1;
- temp=s[top];
- z++;
- for(i=1;i<=m;i++)
- {
- if(a[temp][i]==1&&v[i]==0)
- s[++top]=i;
- }//找出连接的点。
- }
- else top--;
- }
- }//深搜;
- int main()
- {
- int i,q;
- while(scanf("%d%d",&n)!=EOF)
- {
- if(m==0&&n==0)break;
- memset(a,&q);
- a[p][q]=1;a[q][p]=1;
- }
- z=0;
- dfs();
- if(z==m)
- printf("Connected graph\n");
- else printf("Unconnected graph\n");
- }
- }
用的是图的深搜+累计搜到的点。