UVA 208 Firetruck
来源:互联网 发布:淘宝充流量怎么退款 编辑:程序博客网 时间:2024/05/09 21:37
用dfs搜索所有路径即可,注意一点的是如果1到N是不连通的,我们就没有必要枚举所有路径了。
#include <cmath>#include <cstdio>#include <cstdlib>#include <cstring>#include <iostream>#include <string>#include <vector>#include <queue>#include <algorithm>using namespace std;const int maxn = 1010;struct Edge { int v, next; Edge() {} Edge(int t_v, int t_next) : v(t_v), next(t_next) {}}edges[2*maxn];int head[maxn], edge_sum;void add_edge(int u, int v) { edges[edge_sum].v = v; edges[edge_sum].next = head[u]; head[u] = edge_sum++; edges[edge_sum].v = u; edges[edge_sum].next = head[v]; head[v] = edge_sum++;}int N;int cnt;int path[maxn];bool visit[maxn];vector<int> vec[maxn];void init_graph() { for(int i = 0; i < maxn; ++i) { vec[i].clear(); } //edge_sum = 0; //memset(head, -1, sizeof(head));}bool dfs1(int u) { visit[u] = true; if(u == N) { return true; } int len = vec[u].size(); for(int i = 0; i < len; ++i) { int v = vec[u][i]; if(visit[v]) continue; if(dfs1(v)) return true; } return false;}void dfs2(int u, int pos) { path[pos] = u; if(u == N) { cnt++; for(int i = 0; i <= pos; ++i) { if(i == 0) { printf("%d", path[i]); } else { printf(" %d", path[i]); } } printf("\n"); return ; } int len = vec[u].size(); for(int i = 0; i < len; ++i) { int v = vec[u][i]; if(visit[v]) continue; visit[v] = true; dfs2(v, pos + 1); visit[v] = false; } return ;}int main() { //freopen("aa.in", "r", stdin); int u, v; int kcase = 0; while(scanf("%d", &N) != EOF) { kcase++; init_graph(); while(scanf("%d %d", &u, &v) != EOF) { if(u == 0 && v == 0) break; vec[u].push_back(v); vec[v].push_back(u); //add_edge(u, v); } for(int i = 1; i < maxn; ++i) { sort(vec[i].begin(), vec[i].end()); } cnt = 0; printf("CASE %d:\n", kcase); memset(visit, false, sizeof(visit)); if(!dfs1(1)) { printf("There are %d routes from the firestation to streetcorner %d.\n", 0, N); } else { memset(visit, false, sizeof(visit)); visit[1] = true; dfs2(1, 0); printf("There are %d routes from the firestation to streetcorner %d.\n", cnt, N); } } return 0;}
0 0
- uva 208 - Firetruck
- uva 208 - Firetruck
- uva 208 - Firetruck
- UVa 208 - Firetruck
- UVA 208 - Firetruck
- UVA 208 - Firetruck
- UVa 208 - Firetruck
- UVA 208 Firetruck
- uva 208 Firetruck
- uva 208 Firetruck
- UVa:208 Firetruck
- UVa 208 - Firetruck
- Uva 208 - Firetruck
- UVa 208 - Firetruck
- UVA 208 - Firetruck
- UVA - 208 Firetruck
- uva 208 Firetruck
- UVA - 208 Firetruck
- visual studio 如何显示行号
- Oracle学习笔记2_Oracle管理工具和简单命令
- Hadoop学习笔记_linux网络配置及静态ip设置
- Java中创建线程的两种方式
- Linux常用命令
- UVA 208 Firetruck
- Java线程的互斥
- Oracle学习笔记3_用户管理
- Oracle学习笔记4_数据库表的管理
- Oracle学习笔记5_简单查询
- Hadoop学习笔记_初识Hadoop
- 陈怡暖:2015.5.25早间最强现货黄金白银操作建议
- C/C++回调函数
- Linuxz中Xmanager配置