UVa 208 - Firetruck
2016-04-12 19:47
375 查看
題目:有m個城市,求從1到n的所有路徑。
分析:圖論,搜索。數據較大,先求解連通關係,再通過dfs 求解。
說明:連通關係可以使用并查集、Tarjan、逆向dfs、floyd等方法。
#include <cstring>
#include <cstdio>
int maps[22][22], used[22], save[22];
int dfs(int s, int e, int d, int size)
{
if (s == e) {
printf("1");
for (int i = 1; i < d; ++ i)
printf(" %d",save[i]);
puts("");
return 1;
}
int sum = 0;
for (int i = 2; i <= size; ++ i)
if (!used[i] && maps[i][e] && maps[s][i] == 1) {
used[i] = 1;
save[d] = i;
sum += dfs(i, e, d+1, size);
used[i] = 0;
}
return sum;
}
int main()
{
int n, u, v, cases = 1;
while (~scanf("%d",&n)) {
memset(maps, 0, sizeof(maps));
int size = 0;
while (~scanf("%d%d",&v,&u) && (u|v)) {
maps[u][v] = 1;
maps[v][u] = 1;
if (size < u) size = u;
if (size < v) size = v;
}
//floyd
for (int k = 1; k <= size; ++ k)
for (int i = 1; i <= size; ++ i)
for (int j = 1; j <= size; ++ j)
if (!maps[i][j] && maps[i][k] && maps[k][j])
maps[i][j] = 2;
printf("CASE %d:\n",cases ++);
used[1] = 1;
save[0] = 1;
printf("There are %d routes ",dfs(1, n, 1, size));
printf("from the firestation to streetcorner %d.\n",n);
}
return 0;
}
分析:圖論,搜索。數據較大,先求解連通關係,再通過dfs 求解。
說明:連通關係可以使用并查集、Tarjan、逆向dfs、floyd等方法。
#include <cstring>
#include <cstdio>
int maps[22][22], used[22], save[22];
int dfs(int s, int e, int d, int size)
{
if (s == e) {
printf("1");
for (int i = 1; i < d; ++ i)
printf(" %d",save[i]);
puts("");
return 1;
}
int sum = 0;
for (int i = 2; i <= size; ++ i)
if (!used[i] && maps[i][e] && maps[s][i] == 1) {
used[i] = 1;
save[d] = i;
sum += dfs(i, e, d+1, size);
used[i] = 0;
}
return sum;
}
int main()
{
int n, u, v, cases = 1;
while (~scanf("%d",&n)) {
memset(maps, 0, sizeof(maps));
int size = 0;
while (~scanf("%d%d",&v,&u) && (u|v)) {
maps[u][v] = 1;
maps[v][u] = 1;
if (size < u) size = u;
if (size < v) size = v;
}
//floyd
for (int k = 1; k <= size; ++ k)
for (int i = 1; i <= size; ++ i)
for (int j = 1; j <= size; ++ j)
if (!maps[i][j] && maps[i][k] && maps[k][j])
maps[i][j] = 2;
printf("CASE %d:\n",cases ++);
used[1] = 1;
save[0] = 1;
printf("There are %d routes ",dfs(1, n, 1, size));
printf("from the firestation to streetcorner %d.\n",n);
}
return 0;
}
相关文章推荐
- 《机器学习实战》学习笔记(四):Naive Bayes
- nyoj289苹果
- JAVA网络编程
- 阶乘之和
- 数据结构的基本概念
- maven dependencies与dependencyManagement的区别
- POJ2524:Ubiquitous Religions (并查集模板)
- android异常处理——try、catch、finally、throw、throws
- 数据结构(10):二叉树基本功能的实现
- 2.MaxSubArray-Leetcode
- 点类
- 嵌入式 GDB调试死锁示例
- ImageView的ScaleType属性
- 搜狐新闻爬虫
- YII2 日志
- Hadoop RPC机制
- VC实现当前程序退出后重启
- Nginx的介绍和使用
- 嵌入式 Linux下curl库API简单介绍
- 嵌入式 Linux下编译并使用curl静态库