UVA - 208 Firetruck(floyd+DFS)
2017-08-09 10:47
387 查看
点击打开题目链接
题目大意:
给出一个无向图及节点n,求解从节点1 到节点n的所有路径,按字典序从小到大输出。
思路:
先用floyd算法求解连通关系,然后dfs求解。(连通关系也可以用并查集)
附上AC代码:
#include<iostream>
#include<cstring>
using namespace std;
int _map[25][25],path[25],used[25];
int n,u,v;
int _max,kase;
int dfs(int s,int dis){
int sum=0;
if(s==n){
for(int i=0;i<dis;i++){
if(i==0)cout<<path[0];
else cout<<' '<<path[i];
}
cout<<endl;
return 1;
}
for(int i=2;i<=_max;i++){
if(!used[i]&&_map[i]
&&_map[s][i]==1){
used[i]=1;
path[dis]=i;
sum+=dfs(i,dis+1);
used[i]=0;
}
}
return sum;
}
int main(){
kase=0;
ios::sync_with_stdio(false);
while(cin>>n){
_max=0;
memset(_map,0,sizeof(_map));
memset(path,0,sizeof(path));
memset(used,0,sizeof(used));
while(cin>>u>>v,u||v){
_map[u][v]=_map[v][u]=1;
if(u>_max)_max=u;
if(v>_max)_max=v;
}
for(int k=1;k<=_max;k++)
for(int i=1;i<=_max;i++)
for(int j=1;j<=_max;j++){
if(!_map[i][j]&&_map[i][k]&&_map[k][j])
_map[i][j]=2;
}
used[1]=1;
path[0]=1;
cout<<"CASE "<<++kase<<":"<<endl;
cout<<"There are "<<dfs(1,1)<<" routes ";
cout<<"from the firestation to streetcorner "<<n<<"."<<endl;
}
return 0;
}
题目大意:
给出一个无向图及节点n,求解从节点1 到节点n的所有路径,按字典序从小到大输出。
思路:
先用floyd算法求解连通关系,然后dfs求解。(连通关系也可以用并查集)
附上AC代码:
#include<iostream>
#include<cstring>
using namespace std;
int _map[25][25],path[25],used[25];
int n,u,v;
int _max,kase;
int dfs(int s,int dis){
int sum=0;
if(s==n){
for(int i=0;i<dis;i++){
if(i==0)cout<<path[0];
else cout<<' '<<path[i];
}
cout<<endl;
return 1;
}
for(int i=2;i<=_max;i++){
if(!used[i]&&_map[i]
&&_map[s][i]==1){
used[i]=1;
path[dis]=i;
sum+=dfs(i,dis+1);
used[i]=0;
}
}
return sum;
}
int main(){
kase=0;
ios::sync_with_stdio(false);
while(cin>>n){
_max=0;
memset(_map,0,sizeof(_map));
memset(path,0,sizeof(path));
memset(used,0,sizeof(used));
while(cin>>u>>v,u||v){
_map[u][v]=_map[v][u]=1;
if(u>_max)_max=u;
if(v>_max)_max=v;
}
for(int k=1;k<=_max;k++)
for(int i=1;i<=_max;i++)
for(int j=1;j<=_max;j++){
if(!_map[i][j]&&_map[i][k]&&_map[k][j])
_map[i][j]=2;
}
used[1]=1;
path[0]=1;
cout<<"CASE "<<++kase<<":"<<endl;
cout<<"There are "<<dfs(1,1)<<" routes ";
cout<<"from the firestation to streetcorner "<<n<<"."<<endl;
}
return 0;
}
相关文章推荐
- Uva208 Firetruck【dfs】【习题7-1】
- UVa 208 Firetruck / dfs + floyd
- uva 208 Firetruck (需要预先处理 再dfs,TLE是此题AC常规步骤……)
- uva 208 Firetruck (DFS + 并查集)
- UVa 208:Firetruck(DFS)
- UVA 208 Firetruck(DFS)
- Uva 208 Firetruck(dfs并查集优化)
- UVA208 Firetruck 消防车(并查集,dfs)
- UVa 208 - Firetruck(DFS判连通+回溯)
- uva 208 Firetruck
- UVA208 Firetruck 回溯
- UVa 208 - Firetruck 回溯+剪枝 数据
- Firetruck UVA - 208
- uva 208 dfs回溯+并查集判连通
- UVA 208 Firetruck
- uva 208 Firetruck
- uva 208 Firetruck (回溯)
- uva208 -Firetruck (双向搜索进行剪枝)
- UVa 208 - Firetruck <双向DFS>
- UVA 208 Firetruck