您的位置:首页 > 其它

UVA 208 - Firetruck

2013-02-07 14:01 579 查看
#include<cstdio>

#include<cstring>

#include<queue>

#include<vector>

#include<algorithm>

using namespace std;

int n,counts,path[300],p[30],vis[30];

vector<int>map[30];

int init_dfs(int u)

{

p[u] = 1;

for(int i = 0; i < map[u].size(); i++)

{

int v = map[u][i];

if(!p[v])

init_dfs(v);

}

}

int dfs(int cur)

{

if(path[cur-1]==n)

{

printf("%d",path[0]);

for(int i = 1; i < cur; i++)

printf(" %d",path[i]);

printf("\n");

counts++;

return 0;

}

else for(int i = 0; i < map[path[cur-1]].size(); i++)

{

int v = map[path[cur-1]][i];

if(!vis[v]&&p[v])

{

path[cur] = v;

vis[v] = 1;

dfs(cur+1);

vis[v] = 0;

}

}

}

int main()

{

int a,b,kc=0;

while(scanf("%d",&n)==1)

{

for(int i = 0; i < 30; i++) map[i].clear();

memset(vis,0,sizeof(vis));

memset(p,0,sizeof(p));

for(;;)

{

scanf("%d %d",&a,&b);

if(!a&&!b) break;

map[a].push_back(b);

map[b].push_back(a);

}

for(int i = 0; i < 30; i++) sort(map[i].begin(), map[i].end());

printf("CASE %d:\n",++kc);

counts=0;

init_dfs(n);

path[0]=1;

vis[1]=1;

dfs(1);

printf("There are %d routes from the firestation to streetcorner %d.\n",counts,n);

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: