求助 样例能过 0分
查看原帖
求助 样例能过 0分
585534
SHenP楼主2022/8/20 22:22
#include<cstdio>
#include<vector>
#include<algorithm>
#define MAXN 10005
#define INF ((1<<31)-1)
using namespace std;
class edge {
	public:
		int to,w;
		edge(int _to,int _w) {
			to=_to;
			w=_w;
		}
};
vector<edge>map[MAXN];
int dis[MAXN];
bool vis[MAXN];
int main() {
	int n,m,s;
	scanf("%d %d %d",&n,&m,&s);
	for(int i=1; i<=n; i++)dis[i]=INF;
	for(int i=0; i<m; i++) {
		int u,v,w;
		scanf("%d %d %d",&u,&v,&w);
		map[u].push_back(edge(v,w));
		map[v].push_back(edge(u,w));
	}
	dis[s]=0;
	vis[s]=true;
	for(int i=0; i<map[s].size(); i++)dis[map[s][i].to]=map[s][i].w;
	while(true) {
		int mindis=INF,mink=-1;
		for(int i=1; i<=n; i++)if(!vis[i]&&dis[i]<mindis) {
				mindis=dis[i];
				mink=i;
			}
		if(mink==-1)break;
		vis[mink]=true;
		for(int i=0; i<map[mink].size(); i++)dis[map[mink][i].to]=min(dis[map[mink][i].to],dis[mink]+map[mink][i].w);
	}
	for(int i=1; i<=n; i++)printf("%d ",dis[i]);
	return 0;
}

写过一样的代码是100分 再写一遍不知道哪里的问题

2022/8/20 22:22
加载中...