1131. Subway Map (30)
来源:互联网 发布:nginx 禁止某ip访问 编辑:程序博客网 时间:2024/05/21 22:29
#include<cstdio>#include<vector>using namespace std;const int maxn=10010;const int INF=0x3fffffff;vector<int> G[maxn];bool vis[maxn];int lines[maxn][maxn];vector<int> temp,ans;int st,ed;int minTransfer,minDepth;int calTransfer(vector<int> vc){ int ans=0,curLine=0; for(int i=1;i<vc.size();i++){ int from=vc[i-1],to=vc[i]; if(lines[from][to]!=curLine){ curLine=lines[from][to]; ans++; } } return ans;}void DFS(int index,int depth){ vis[index]=true; temp.push_back(index); if(index==ed){ if(depth<minDepth){ minDepth=depth; minTransfer=calTransfer(temp); ans=temp; }else if(depth==minDepth){ int transfer=calTransfer(temp); if(transfer<minTransfer){ minTransfer=transfer; ans=temp; } } temp.pop_back(); vis[index]=false; return; } for(int i=0;i<G[index].size();i++){ if(vis[G[index][i]]==false){ DFS(G[index][i],depth+1); } } vis[index]=false; temp.pop_back();}void printPath(){ int head,curLine=0; printf("%d\n",minDepth); for(int i=1;i<ans.size();i++){ int from=ans[i-1],to=ans[i]; if(lines[from][to]!=curLine){ if(curLine!=0) printf("Take Line#%d from %04d to %04d.\n",curLine,head,from); curLine=lines[from][to]; head=from; } } printf("Take Line#%d from %04d to %04d.\n",curLine,head,ans[ans.size()-1]);}//void dfs(int v, int depth) //深度优先也可以这样写//{// if (v == ed) { // 到终点// if (depth < minDepth) {// minDepth = depth;// minTransfer = calTransfer(temp);// ans = temp;// } else if (depth == minDepth) {// int transfer = calTransfer(temp);// if (transfer < minTransfer) {// minTransfer = transfer;// ans = temp;// }// }// return ;// }// for(int i = 0; i < G[v].size(); ++i) {// int v2 = G[v][i];// if (!vis[v2]) {// vis[v2] = true;// temp.push_back(v2);// dfs(v2, depth+1);// temp.pop_back();// vis[v2] = false;// }// }//}int main(){ int n; scanf("%d",&n); for(int i=1;i<=n;i++){ int m,pre,next; scanf("%d%d",&m,&pre); for(int j=1;j<m;j++){ scanf("%d",&next); G[pre].push_back(next); G[next].push_back(pre); lines[pre][next]=lines[next][pre]=i; pre=next; } } int k; scanf("%d",&k); while(k--){ scanf("%d%d",&st,&ed); minTransfer=minDepth=INF; ans.clear(),temp.clear(); DFS(st,0);// temp.push_back(st);// dfs(st, 0);//深度优先也可以这样写 printPath(); } return 0; }
阅读全文
0 0
- 1131. Subway Map (30)
- 1131. Subway Map (30)
- 1131. Subway Map (30)
- 1131. Subway Map (30)
- PAT 1131. Subway Map (30)
- PAT 1131. Subway Map (30) -甲级
- 1131. Subway Map (30)[dfs剪枝+回溯]
- PAT 1131. Subway Map (30) DFS
- 【PAT】【Advanced Level】1131. Subway Map (30)
- PAT 甲级 1131. Subway Map (30)
- PAT题目:1131. Subway Map (30)
- 1131. Subway Map 引用
- PAT甲级1131. Subway Map 最短路/bfs
- PAT (Advanced Level) Practise 1131 Subway Map (30)
- PAT (Advanced Level) Practise 1131 Subway Map (30)
- Subway
- Subway
- Subway
- struts2多文件上传
- 数字签名是什么?
- Java 序列化的高级认识
- 密码Md5加密+加盐
- 设计模式-观察者模式
- 1131. Subway Map (30)
- Android购物车demo(多店铺带商品,类似京东购物车)
- 1033. To Fill or Not to Fill (25) 贪心算法
- 一个菜鸟的前端之路----遇到的坑
- Java8学习笔记
- java程序员的大数据之路(12):Hadoop的守护进程
- HDU
- Python资源汇总
- 171123 逆向-TLS回调函数