为什么dij过不了而floyed可以过,帮忙看一下dij的问题谢谢!
查看原帖
为什么dij过不了而floyed可以过,帮忙看一下dij的问题谢谢!
907430
corner_xiejunqi楼主2024/10/21 22:59

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e5+10;
int n,m,q;
int t[201];
int g[201][201];
//int vis[201];
//int dis[201],book[201];
void update(int now){
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			if(g[i][j]>g[i][now]+g[now][j]){
				g[i][j]=g[i][now]+g[now][j];
			}
		}
	}
	return;
}
signed main(){
	// step 1、读题、声明变量
	ios::sync_with_stdio(false);
	cin.tie(0);
	cin>>n>>m;
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			if(i!=j) g[i][j]=0x3f3f3f3f;
			else g[i][j]=0;
		}
	}
	/**
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			if(i==j) g[i][j]=0;
			else g[i][j]=0x3f3f3f3f;
		}
	}
	*/
	for(int i=0;i<n;i++){
		cin>>t[i];
	}
	// step 2、输入
	for(int i=1;i<=m;i++){
		int x,y,w;
		cin>>x>>y>>w;
		g[x][y]=g[y][x]=w;
	}
	cin>>q;
	int now=0;
	while(q--){
		int x,y,tt;
		cin>>x>>y>>tt;
		while(t[now]<=tt && now<n){
			update(now);
			now++;
		}
		if(t[x]>tt || t[y]>tt) {
			cout<<-1<<'\n';
			continue;
		}else{
			if(g[x][y]==0x3f3f3f3f) cout<<-1<<'\n';
			else cout<<g[x][y]<<'\n';
		}
	}
	/**
	while(q--){
		int x,y,tt;
		cin>>x>>y>>tt;
		memset(vis,0,sizeof vis);
		memset(dis,0,sizeof dis);
		memset(book,0,sizeof book);
		for(int i=0;i<n;i++){
			if(tt>=t[i]){
				vis[i]=1;
			}
		}
		//for(int i=0;i<n;i++){
		//	cout<<vis[i]<<' ';
		//}
		//cout<<'\n';
		if(!vis[x] || !vis[y]){
			cout<<-1<<'\n';
			continue;
		}
		for(int i=0;i<n;i++){
			if(vis[i]) dis[i]=g[x][i];
			else dis[i]=0x3f3f3f3f;
		}
		//for(int i=0;i<n;i++){
		//	cout<<dis[i]<<' ';
		//}
		//cout<<'\n';
		book[x]=1;
		for(int i=1;i<=n-1;i++){
			int minn=0x3f3f3f3f,u;
			for(int j=0;j<n;j++){
				if(!book[j] && dis[j]<minn && vis[j]){
					minn=dis[j];
					u=j;
				}
			}
			book[u]=1;
			for(int j=0;j<n;j++){
				if(!book[i] && dis[j]>dis[u]+g[u][j] && vis[j]){
					dis[j]=dis[u]+g[u][j];
				}
			}
		}
		if(dis[y]==0x3f3f3f3f) cout<<-1<<'\n';
		else cout<<dis[y]<<'\n';
	}
	*/
	// step 3、处理

	// step 4、输出
	return 0;
}


2024/10/21 22:59
加载中...