#include "stdio.h" #include "string.h" int ans,sum,vis[25][25],cnt,v[25],c[25],ok[25]; void pdfs(int st)//从后面开始搜索,标记所以可能的点 { int i; for(i=0;i<25;i++) if(vis[st][i]&&!ok[i]) { ok[i]=1; pdfs(i); } } void dfs(int st,int t) { int i; if(st==ans) { cnt++; for(i=1; i<t; i++) printf("%d ",v[i]); printf("%d ",ans); return; } for(i=1; i<22; i++) { if(vis[st][i]&&!c[i]&&ok[i]) { c[i]=1; vis[st][i]= vis[i][st]=0; v[t]=st; dfs(i,t+1); vis[st][i]= vis[i][st]=1; c[i]=0; } } } int main() { int a,b,cas=0; while(~scanf("%d",&ans)) { memset(vis,0,sizeof(vis)); memset(c,0,sizeof(c)); memset(ok,0,sizeof(ok)); while(scanf("%d%d",&a,&b)) { if(a==0&&b==0) break; vis[b][a]= vis[a][b]=1; } printf("CASE %d: ",++cas); cnt=0; pdfs(ans); c[1]=1; dfs(1,1); printf("There are %d routes from the firestation to streetcorner %d. ",cnt,ans); } return 0; }
进行一次搜索,将相连的点标记一下。
版权声明:本文为博主原创文章,未经博主允许不得转载。http://xiang578.top/