例题6-20 UVA 1599 Ideal Path理想路径
来源:互联网 发布:什么软件可以四连拍 编辑:程序博客网 时间:2024/04/28 10:33
思路和书上思路一样!
先 从终点BFS,用d数组记录到终点的最短距离,直接从0开始不断加1即可!
扫到起点后,在从起点开始BFS,走路的条件必须满足,下一个路 加 1 等于这个路,而且没有访问过 vis[i] = 0,然后在是字典序最小(把所有字典序最小的全部加入!)
最后存入答案时,用step 记录从1走到当前步的步数,这个数值就是答案的 索引,最后答案存入所有路中最小字典序就行了!
这里连接整个图时,最好用vector 数组,room[a][i],表示a与i相连!颜色也是如此。
注意一个细节:
INF 也就是最大颜色值是10^9不要开的太小!
#include<bits/stdc++.h>using namespace std;const int maxn = 100000 + 10;vector<int>room[maxn];vector<int>color[maxn];const int INF = 1e9+10;int ans[maxn];int d[maxn];int vis[maxn];int n,m;void BFS1(){ queue<int>q; q.push(n); d[n]=0; while(!q.empty()){ int u = q.front();q.pop(); if (u == 1)return; int len = room[u].size(); for (int i = 0; i < len; ++i){ int v = room[u][i]; if (d[v] < 0){ d[v] = d[u] + 1; q.push(v); } } }}void BFS2(){ queue<int>q; q.push(1); while(!q.empty()){ int u = q.front();q.pop(); if(u == n)return; int len = room[u].size(); int t = INF; for (int i = 0; i < len; ++i){ int v = room[u][i]; if (d[v] == d[u] - 1)t = min(t,color[u][i]); } int step = d[1] - d[u]; if (!ans[step])ans[step] = t; else ans[step] = min(t,ans[step]); for (int i = 0; i < len; ++i){ int v = room[u][i]; if (vis[v] == 0 && t == color[u][i] && d[v] == d[u] - 1){ vis[v] = 1; q.push(v); } } }}int main(){ while(scanf("%d%d",&n,&m) == 2){ memset(vis,0,sizeof(vis)); memset(d,-1,sizeof(d)); memset(ans,0,sizeof(ans)); for (int i = 0; i < maxn; ++i){ room[i].clear(); color[i].clear(); } while(m--){ int a,b,c; scanf("%d%d%d",&a,&b,&c); if (a == b)continue; room[a].push_back(b); room[b].push_back(a); color[a].push_back(c); color[b].push_back(c); } BFS1(); BFS2(); printf("%d\n%d",d[1],ans[0]); for (int i = 1; i < d[1]; ++i)printf(" %d",ans[i]); printf("\n"); } return 0;}
0 0
- 例题6-20 UVA 1599 Ideal Path理想路径
- 理想路径(Ideal Path,UVa 1599)
- UVA 1599 Ideal Path (理想路径)
- 例题6-20 理想路径(Ideal Path, NEERC 2010, UVa1599)
- uva 1599 - Ideal Path
- UVa 1599 Ideal Path
- Uva - 1599 - Ideal Path
- UVa 1599 Ideal Path
- UVa 1599 Ideal Path
- UVA 1599 Ideal Path
- uva UVA - 1599 Ideal Path
- 例题6-20 UVa1599 Ideal Path(两次BFS)
- UVA 1599(p173)----Ideal Path
- 例题6-20 理想路径 UVa1599
- UVa 1599 - Ideal Path <两次BFS>
- UVa 1599 - Ideal Path(BFS)
- UVa 1599 Ideal Path[待AC]
- ACM篇:UVa 1599 -- Ideal Path
- unity3d transform基本属性获取和设置
- 抓包工具Fiddler的使用(3):Fiddler中Composer的使用
- 错误: su: 无法设置组: 不允许的操作
- iOS CoreData数据迁移-默认迁移方式
- Yalantis 那些动画效果很炫的 Android 及 iOS 开源项目
- 例题6-20 UVA 1599 Ideal Path理想路径
- Mac终端 常用命令
- exit()使用
- 写给iOS程序员的命令行使用秘籍
- 简单总结SynchronousQueue 的特点
- 设计模式之代理模式
- 一个可以下载linux 内核升级包的网站
- 游戏引擎收藏
- Python-----文件读写