求助!直接dijsktra只有五分,一直没找到问题
  • 板块P2683 小岛
  • 楼主tutu_6trc
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/3/7 14:26
  • 上次更新2023/10/23 22:47:29
查看原帖
求助!直接dijsktra只有五分,一直没找到问题
948229
tutu_6trc楼主2023/3/7 14:26
#include <bits/stdc++.h>
using namespace std;
const int MAXV=1010;
int n,m;
long long d[MAXV];
const int INF=1000000;
int pre[MAXV];
bool visit[MAXV];
long long G[MAXV][MAXV]; 
void dijkstra(int s){
	fill(d,d+MAXV,INF);
	d[s]=0;
	for(int i=1;i<=n;i++){
		int u=-1,MIN=INF;
		for(int j=1;j<=n;j++){
			if(visit[j]==false&&d[j]<MIN){
				u=j;
				MIN=d[j];
			}
		}
		if(u==-1) return;
		visit[u]=true;
		for(int v=1;v<=n;v++){
			if(visit[v]==false&&d[u]+G[v][u]<d[v]&&G[u][v]!=INF){
				d[v]=d[u]+G[u][v];
			}
		}
	}
}
int main(){
	cin>>n>>m;
	fill(G[0],G[0]+MAXV*MAXV,INF); 
	for(int i=0;i<m;i++){
		int k;
		cin>>k;
		if(k==0){
			int st,ed;
		    cin>>st>>ed;
		    fill(visit,visit+MAXV,false);
		    dijkstra(st);
		    if(d[ed]!=INF)
		    cout<<d[ed]<<endl;
			else
			cout<<-1<<endl;
		}
		if(k==1){
			int u,v,w;
			cin>>u>>v>>w;
			if(w<G[u][v]){
			G[u][v]=w;
			G[v][u]=w;
		}}
	}
}
2023/3/7 14:26
加载中...