poj 1847
来源:互联网 发布:linux vim 保存 编辑:程序博客网 时间:2024/04/20 10:07
大致题意:现在有一铁路网络,有n个交叉点,和一些开关。通过开关可以改变路线方向,使其能驶向其他交叉点。开关的初始状态已知,即(初始直接某两点直接相连)。问从出发点到目的地最少要动多少开关才能到达。
最短路问题,开关初始状态边权为0,其他为1,这个条件转化比较有意思,深感智商不够用了。。
#include <iostream>#include <queue>using namespace std;#define inf 0x3f3f3f3fint g[110][110];int d[110],vis[110];int n,a,b;void dij(){ cin>>n>>a>>b; a--; b--; for(int i=0;i<n;i++) for(int j=0;j<n;j++) g[i][j]=inf; for(int i=0;i<n;i++){ int k,m; cin>>k>>m; g[i][--m]=0; for(int j=1;j<k;j++){ cin>>m; g[i][--m]=1; } } for(int i=0;i<n;i++) d[i]=g[a][i]; vis[a]=1; for(int k=1;k<n;k++){ int mind=inf,j; for(int i=0;i<n;i++) if(!vis[i] && d[i]<mind) mind=d[i],j=i; vis[j]=1; for(int i=0;i<n;i++) if(!vis[i] && d[j]+g[j][i]<d[i]) d[i]=d[j]+g[j][i]; } if(d[b]<inf) cout<<d[b]<<endl; else cout<<-1<<endl;}/*struct edge{ int u,v,w;}e[10010];void bellford(){ cin>>n>>a>>b; a--; b--; int t=-1; for(int i=0;i<n;i++){ int k,m; cin>>k>>m; e[++t].u=i; e[t].v=--m; e[t].w=0; for(int j=1;j<k;j++){ cin>>m; e[++t].u=i; e[t].v=--m; e[t].w=1; } } for(int i=0;i<n;i++) d[i]=inf; d[a]=0; for(int i=0;i<n;i++){ for(int j=0;j<=t;j++){ if(d[ e[j].u ]+e[j].w < d[ e[j].v ]) d[ e[j].v ]=d[ e[j].u ]+e[j].w; } } if(d[b]<inf) cout<<d[b]<<endl; else cout<<-1<<endl;}*/#define N 110struct Edge{ int v,w;}e[N*N];int root[N];int next[N*N];void spfa(){ queue<int> q; cin>>n>>a>>b; a--; b--; int m=-1; for(int i=0;i<n;i++) root[i]=-1; for(int i=0;i<n;i++){ int k,y; cin>>k; for(int j=0;j<k;j++){ cin>>y; e[++m].v=--y; e[m].w=(j||0); next[m]=root[i]; root[i]=m; } } for(int i=0;i<n;i++) d[i]=inf,vis[i]=0; d[a]=0; q.push(a); while(!q.empty()){ int t=q.front(); q.pop(); vis[t]=0; for(int i=root[t]; i!=-1; i=next[i]){ if( d[t]+e[i].w < d[ e[i].v ] ){ d[ e[i].v ]=d[t]+e[i].w; if(!vis[ e[i].v ]){ q.push(e[i].v); vis[ e[i].v ]=1; } } } } if(d[b]<inf) cout<<d[b]<<endl; else cout<<-1<<endl;}int main(){ //dij(); //bellford(); spfa(); return 0;}
- POJ 1847
- POJ 1847
- poj 1847
- poj 1847
- poj-1847
- poj---1847
- POJ 1847
- POJ 1847 Floyd应用
- POJ 1847 Dijkstra应用
- poj 1847(Tram) Dijkstra
- poj 1847 floyd
- poj 1847 bellman-ford
- POJ-1847-Tram
- POJ 1847 Tram
- poj 1847 DFS+剪枝
- poj 1847 Tram
- poj 1847:Tram
- 【Dijkstra】-POJ-1847-Tram
- 介绍CSS盒模型
- Android 修改Bitmap 图片像素的信息 R G B 颜色值 详解
- NBUT1482:嘛~付钱吧!(完全背包)
- my97 WdatePicker 使用大全
- Linux根文件系统结构再认识
- poj 1847
- 【deep learning学习笔记】Autoencoder
- Diskless / remote boot with Open-iSCSI
- JS中 prototype 关键字的使用
- jsp servlet 乱码
- Combination Sum
- poj 2585 Window Pains (建图+拓扑排序)
- 为MediaPlayer设置监听器
- POJ2485 最短路的水题