UVA-208

天道好轮回。UVA饶过谁。

就是一个图的DFS。

不过这个图的边太多,要事先判一下起点和终点是否联通(我喜欢用并查集),否则会TLE。

#include <iostream>
#include <cstdio>
#include <vector>
#include <cstring>
#define maxn 40
using namespace std; int a[maxn][maxn], vis[maxn], ans, f[maxn];
vector<int> q; int build(int x, int y)
{
a[x][y] = ;
a[y][x] = ;
} int found(int x)
{
if (f[x] == x) return x;
f[x] = found(f[x]);
return f[x]; } int add(int x, int y)
{
int fx = found(x), fy = found(y);
if (fx != fy) f[fx] = fy;
} void DFS(int k, int n)
{
if (k == n)
{
for (int i = ; i < q.size()-; i++)
cout << q[i] << " ";
cout << q[q.size()-] << endl;
ans++;
} for (int i = ; i <= maxn / ; i++)
if (!vis[i] && a[k][i])
{
vis[i] = ;
q.push_back(i);
DFS(i, n);
q.pop_back();
vis[i] = ;
}
} int main()
{
int n, cases = ;
while (cin >> n)
{
memset(a, , sizeof(a));
memset(vis, , sizeof(vis));
for (int i = ; i <= maxn/; i++) f[i] = i;
ans = ;
while (!q.empty()) q.pop_back();
int x, y;
while (cin >> x >> y && x && y)
{
build(x, y);
add(x, y);
}
++cases;
printf("CASE %d:\n", cases);
q.push_back();
vis[] = ;
if (found() == found(n)) DFS(, n);
printf("There are %d routes from the firestation to streetcorner %d.\n", ans, n);
} }
#

最新文章

  1. Ubuntu14.04或16.04下Hadoop及Spark的开发配置
  2. gitlab多人协作开发
  3. SQLMAP源码分析-目录结构
  4. ORM框架是什么
  5. opencv学习笔记(六)直方图比较图片相似度
  6. js时间冒泡,阻止事件冒泡
  7. MySQL与mabits大小比较、日期比较示例
  8. linux 多个源文件在编译时会产生一个目标文件
  9. Docker - 用Flannel跨主机
  10. 新概念英语(1-125)Tea for two
  11. Android 开发 图片网络缓存加载框架Fresco
  12. gradle下载的依赖包位置 及 修改
  13. Linux 搭建 Jenkins
  14. 使用css方法使footer保持在页面的最底部
  15. 嵌入AppBar并且带搜索建议的搜索框(Android)
  16. BZOJ.5312.冒险(线段树)
  17. Vmaware复制后的虚拟机不能上网问题解决
  18. java File linux windows 下 绝对路径 相对路径问题
  19. Java使用String类格式化当前日期
  20. Azkaban时区问题导致调度差1天

热门文章

  1. G-华华对月月的忠诚
  2. bzoj3626: [LNOI2014]LCA奇技淫巧+树剖+线段树
  3. 自己写的Grid组件,第二版
  4. 利用Common-Fileupload上传文件图片
  5. JS中对数组元素进行增删改移
  6. jQuery.Deferred(jQuery1.5-2.1)源码剖析
  7. GoAccess参数选项
  8. 洛谷 P2264 情书
  9. 洛谷 1164 小A点菜
  10. Windows Dos命令下查看端口号,杀死端口