普通板子全wa,是板子问题吗?
查看原帖
普通板子全wa,是板子问题吗?
181805
天马行空mz楼主2022/4/21 18:20
#include<bits/stdc++.h>
using namespace std;
#define maxn 2000
#define ll long long
int e[maxn][maxn],dis[maxn],book[maxn];//邻接矩阵,路程储存,标记数组
int inf=99999999;
int n,m,s;//点的个数、有向边的个数、出发点编号
int start,to,val;//起终点,权值
int flag;//中转标记
int minn;//最小值
void init(int n)
{
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			if(i==j)
				e[i][j]=0;//对角线归零
			else
				e[i][j]=inf;//其他地方存为正无穷
		}
	}
}
int main()
{
	cin>>n>>m>>s;
	init(n);//初始化
	for(int i=1;i<=m;i++)//读入边
	{
		cin>>start>>to>>val;//起终点,权值
		e[start][to]=val;//存图
	}
	for(int i=1;i<=n;i++)
	{
		dis[i]=e[s][i];
	}
	for(int i=1;i<=n;i++)
		book[i]=0;
	book[s]=1;
	for(int i=1;i<=n-1;i++)
	{
		minn=inf;
		for(int j=1;j<=n;j++)
		{
			if(book[j]==0&&dis[j]<minn)
			{
				minn=dis[j];
				flag=j;
			}
		}
		book[flag]=1;
		for(int j=1;j<=n;j++)
		{
			if(e[flag][j]<inf)
			{
				if(dis[j]>dis[flag]+e[flag][j])
				{
					dis[j]=dis[flag]+e[flag][j];
				}
			}
		}
	}
	for(int i=1;i<=n;i++)//输出结果
		cout<<dis[i]<<" ";
	cout<<endl;
	return 0;
}

有组样例:
5 15 5
2 5 181
1 5 98
4 2 49
3 2 262
4 3 26
2 4 192
5 1 221
2 2 254
4 4 233
1 5 44
5 4 67
4 2 214
1 1 47
1 1 118
5 4 3
结果是:
221 52 29 3 0
我跑了一个
221 217 29 3 0

这是为什么???

2022/4/21 18:20
加载中...