求助(runtime)
查看原帖
求助(runtime)
467890
lcx132432432楼主2021/10/4 19:51

代码如下

#include<bits/stdc++.h>
using namespace std;
const int N=100005;
int vis[10005],dis[10005],q[N*2];
int head[N*5],nxt[N*5],to[N*5],tot;
int n,m,ans;
int add(int x,int y,int z){
	nxt[++tot]=head[x];to[tot]=y;head[x]=tot;q[tot]=z;
}
void dijis1(int s){
	dis[s]=0;
	while(!vis[s]){
		vis[s]=1;
		for(int i=head[s];i;i=nxt[i]){
			int v=to[i];
			if(!vis[v]&&dis[v]>dis[s]+q[i])
			    dis[v]=dis[s]+q[i];
		} 
		long long minn=2147483647;
		for(int i=1;i<=n;i++){
			if(!vis[i]&&minn>dis[i]){
				minn=dis[i];
				s=i;
			}
		}
	}
}
int main(){
	int s;
	scanf("%d%d%d",&n,&m,&s);
	int x,y,z;
	for(int i=1;i<=m;i++){
		scanf("%d%d%d",&x,&y,&z);
		add(x,y,z);
	}
	memset(dis,0x3f,sizeof(dis));//cout<<dis[1]<<endl;
	dijis1(s);
	for(int i=1;i<=n;i++)
	if(dis[i]<1061109567)cout<<dis[i]<<' ';
	else cout<<"2147483647"<<' ';
	return 0;
}

第一次写帖子,感谢各位大佬,孩子已经琢磨一小时了还不知道错在哪orz

2021/10/4 19:51
加载中...