为什么会错
  • 板块P1346 电车
  • 楼主dsj2012
  • 当前回复7
  • 已保存回复7
  • 发布时间2024/10/4 16:43
  • 上次更新2024/10/4 19:07:19
查看原帖
为什么会错
996107
dsj2012楼主2024/10/4 16:43

这是只有90的代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,a,b,w[100005],dis[1005][1005];
void floyd(){
	for(int k = 1 ; k <= n ; k ++){
		for(int i = 1 ; i <= n ; i ++){
			for(int j = 1 ; j <= n ; j ++){
				if(dis[i][j] > dis[i][k] + dis[k][j]){
					dis[i][j] = dis[i][k] + dis[k][j];
				}
			}
		}
	}
}
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	cin >> n >> a >> b;
	for(int i = 1 ; i <= n ; i ++){
		for(int j = 1 ; j <= n ; j ++){
			dis[i][j] = 1000000000;
		}
		dis[i][i] = 0;
	}
	for(int i = 1 ; i <= n ; i ++){
		int k;
		cin >> k;
		for(int j = 1 ; j <= k ; j ++){
			cin >> w[j];
			dis[i][w[j]] = min(dis[i][w[j]] , 1ll);
			
		}
		dis[i][w[1]] = 0ll;
	}
	floyd();
	if(dis[a][b] >= 1000000000){
		cout << -1;
	}else{
		cout << dis[a][b];
	}
	return 0;
}
/*
5 1 4
3 2 3 5
2 1 2
3 1 2 4
2 5 1
3 1 2 4
*/

这是100的

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,a,b,w[100005],dis[1005][1005];
void floyd(){
	for(int k = 1 ; k <= n ; k ++){
		for(int i = 1 ; i <= n ; i ++){
			for(int j = 1 ; j <= n ; j ++){
				if(dis[i][j] > dis[i][k] + dis[k][j]){
					dis[i][j] = dis[i][k] + dis[k][j];
				}
			}
		}
	}
}
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	cin >> n >> a >> b;
	for(int i = 1 ; i <= n ; i ++){
		for(int j = 1 ; j <= n ; j ++){
			dis[i][j] = 1000000000;
		}
		dis[i][i] = 0;
	}
	for(int i = 1 ; i <= n ; i ++){
		int k;
		cin >> k;
		for(int j = 1 ; j <= k ; j ++){
			cin >> w[j];
			dis[i][w[j]] = min(dis[i][w[j]] , 1ll);
		dis[i][w[1]] = 0ll;	
		}
		
	}
	floyd();
	if(dis[a][b] >= 1000000000){
		cout << -1;
	}else{
		cout << dis[a][b];
	}
	return 0;
}
/*
5 1 4
3 2 3 5
2 1 2
3 1 2 4
2 5 1
3 1 2 4
*/

我想问一下为什么把判断第一个放外面为什么会错

2024/10/4 16:43
加载中...