dijkstra 7WA 3MLE

P3371 【模板】单源最短路径(弱化版)

为什么排版变成了这样?
by 天下第一! @ 2019-03-18 20:31:21


希望更丰富的展现?使用Markdown
by Kan_kiz @ 2019-03-18 20:32:36


```cpp #include<bits/stdc++.h> using namespace std; int maxx=2147483647; int n,i,j,minl,k,m,s,x,y,z; int c[10001],f[10001][10001]; bool b[10001]; int main(){ cin>>n>>m>>s; for(i=1;i<=n;i++) for(j=1;j<=n;j++) f[i][j]=maxx; for(i=1;i<=m;i++){ cin>>x>>y>>z; f[x][y]=z; f[y][x]=z; } for(i=1;i<=n;i++) c[i]=f[s][i]; memset(b,false,sizeof(b)); b[s]=true; c[s]=0; for(i=1;i<n;i++){ minl=maxx; k=0; for(j=1;j<=n;j++) if((!b[j])&&(c[j]<minl)){ minl=c[j]; k=j; } if(k==0) break; b[k]=true; for(j=1;j<=n;j++) if(c[k]+f[k][j]<c[j]) c[j]=c[k]+f[k][j]; } for(i=1;i<=n;i++) cout<<c[i]<<" "; cout<<endl; return 0; } ```
by Sai0511 @ 2019-03-18 20:32:41


@[Sai_0511](/space/show?uid=114320) 太棒了,谢谢大佬
by 天下第一! @ 2019-03-18 20:33:47


我是用手机发的
by 天下第一! @ 2019-03-18 20:34:13


@[天下第一!](/space/show?uid=54101) 二维数组建议最大开5000*5000,你的f数组越界了
by Timing @ 2019-03-18 20:42:11


@[天下第一!](/space/show?uid=54101) 如果没有其他问题,建议学习一下用小根堆实现dijkstra
by Timing @ 2019-03-18 20:43:05


@[Timing](/space/show?uid=130161) 建议用邻接表存图(一般情况下会好很多)
by Timing @ 2019-03-18 20:44:58


@[天下第一!](/space/show?uid=54101) - 我打的(邻接表存图+优先队列) ```cpp #include<bits/stdc++.h> using namespace std; const int M=500005; int s; typedef pair<int,int> P;//二元组 int head[M],cnt,nxt[M],to[M],w[M],vis[M],dis[M]; void add(int u,int v,int val){ nxt[++cnt]=head[u]; to[cnt]=v; w[cnt]=val; head[u]=cnt; } priority_queue<P,vector<P>,greater<P> > Q; //优先队列是大根堆,用greater改为小根堆 void dij(){ dis[s]=0; Q.push(P(0,s)); while(!Q.empty()){ int u=Q.top().second; Q.pop(); if(vis[u]) continue; vis[u]=1; for(int i=head[u];i;i=nxt[i]){ int v=to[i]; if(vis[v]) continue; if(dis[v]>dis[u]+w[i]){ dis[v]=dis[u]+w[i]; if(!vis[v]) Q.push(P(dis[v],v)); } } } } int n,m; int main(){ ios::sync_with_stdio(false); cin>>n>>m>>s; int u,v,val; for(int i=1;i<=m;i++){ cin>>u>>v>>val; add(u,v,val); } memset(dis,0x7f,sizeof(dis)); dij(); for(int i=1;i<=n;i++){ if(dis[i]>99999999)cout<<2147483647<<' '; else cout<<dis[i]<<' '; } cout<<endl; return 0; } ```
by Timing @ 2019-03-18 20:48:09


谢谢大佬,我学习一下!
by 天下第一! @ 2019-03-18 21:43:17


|