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