UVa 1599 - Ideal Path(BFS)
2015-02-08 15:50
246 查看
给出n个点,m条边的无向图,每条边有一种颜色,求从结点1到结点n颜色字典序最小的最短路径。
例题,书上给了思路,首先反向BFS,记录结点到n最短距离,然后从起点BFS,每次优先选择字典序最小的颜色的路径。
例题,书上给了思路,首先反向BFS,记录结点到n最短距离,然后从起点BFS,每次优先选择字典序最小的颜色的路径。
#include<cstdio> #include<cstring> #include<vector> #include<queue> using namespace std; const int maxn=100010; const int inf=1<<30; int n,vis[maxn],d[maxn]; vector<int> g[maxn],ans; struct way{ int u,v,c; way(int u=0,int v=0,int c=0):u(u),v(v),c(c){} }; vector<way> ways; void build(int u,int v,int c){//储存边。 ways.push_back(way(u,v,c)); int i=(int)ways.size()-1; g[u].push_back(i); } void rev_bfs(){//反向BFS,记录距离。 memset(vis,0,sizeof(vis)); d[n-1]=0; vis[n-1]=true; queue<int> q; q.push(n-1); while(!q.empty()){ int v=q.front(); q.pop(); for(int i=0;i<g[v].size();++i){ int e=g[v][i]; int u=ways[e].v; if(!vis[u]){ vis[u]=true; d[u]=d[v]+1; q.push(u); } } } } void bfs(){ memset(vis,0,sizeof(vis)); ans.clear(); vis[0]=true; vector<int> next; next.push_back(0); for(int i=0;i<d[0];++i){ int min_color=inf; for(int j=0;j<next.size();++j){ int u=next[j]; for(int k=0;k<g[u].size();++k){ int e=g[u][k]; int v=ways[e].v; if(d[u]==d[v]+1) min_color=min(min_color,ways[e].c); } } ans.push_back(min_color); vector<int> next2; for(int j=0;j<next.size();++j){ int u=next[j]; for(int k=0;k<g[u].size();++k){ int e=g[u][k]; int v=ways[e].v; if(d[u]==d[v]+1&&!vis[v]&&ways[e].c==min_color){ vis[v]=true; next2.push_back(v); } } } next=next2; } printf("%d\n",(int)ans.size()); for(int i=0;i<ans.size();++i){ if(i) printf(" "); printf("%d",ans[i]); } printf("\n"); } int main(){ int u,v,c,m; while(~scanf("%d%d",&n,&m)){ ways.size(); for(int i=0;i<n;++i) g[i].clear(); while(m--){ scanf("%d%d%d",&u,&v,&c); build(u-1,v-1,c); build(v-1,u-1,c); } rev_bfs(); bfs(); } return 0; }
相关文章推荐
- UVa 1599 Ideal Path (两次BFS)
- UVa 1599 Ideal Path【BFS】
- UVA 1599, POJ 3092 Ideal Path 理想路径 (逆向BFS跑层次图)
- UVA 1599 Ideal Path(bfs1+bfs2,双向bfs)
- 例题6-20 UVa1599 Ideal Path(两次BFS)
- UVA 1599 Ideal Path【双向bfs+非简单图的最短路】
- uva 1599 Ideal Path (两次bfs)
- 逆向+两次bfs(UVA 1599)
- UVa 1599 Ideal Path[待AC]
- UVa 1599 Ideal Path
- UVa1599/poj 3967 Ideal Path
- UVA - 1599 Ideal Path
- Ideal Path UVA - 1599
- UVA 1599 Ideal Path (HDU 3760)
- UVA 1599(p173)----Ideal Path
- UVa1599 - Ideal Path
- 例题6-20 uva1599 Ideal Path (双向bfs+字典序)
- UVa 1599 - Ideal Path <两次BFS>
- uva 1599 ideal path(好题)——yhx