dij爆零求助
查看原帖
dij爆零求助
1008513
xiaoshumiao楼主2023/11/9 17:58
#include<cstdio>
using namespace std;
const int MAXN=10005,MAXM=500005,INF=0x3f3f3f3f;
int head[MAXN],d[MAXN];
bool vis[MAXN];
struct Edge {
  int end,val,next;
}edge[MAXM];
void add(int u,int v,int w,int i) {
  edge[i].next=head[u];
  edge[i].end=v;
  edge[i].val=w;
  head[u]=i;
}
void dijkstra(int n,int s) {
  for(int i=1;i<=n;i++)
    d[i]=INF;
  d[s]=0;
  int now=s;
  while(!vis[now]) {
  	vis[now]=true;
  	for(int i=head[now];i!=0;i=edge[i].next) {
  	  if(!vis[edge[i].end]&&d[now]+edge[i].val<d[edge[i].end])
  	    d[edge[i].end]=d[now]+edge[i].val;
  	}
  	for(int i=1;i<=n;i++) {
  	  if(!vis[i]&&d[i]<d[now])
  	    now=i;
  	}
  }
}
int main() {
  int n,m,s,u,v,w;
  scanf("%d %d %d",&n,&m,&s);
  for(int i=1;i<=m;i++) {
  	scanf("%d %d %d",&u,&v,&w);
  	add(u,v,w,i);
  }
  dijkstra(n,s);
  for(int i=1;i<=n;i++) {
  	if(d[i]!=INF)
  	  printf("%d ",d[i]);
  	else
  	  printf("2147483647 ");
  }
  return 0;
}
2023/11/9 17:58
加载中...