请问这个代码哪里错了,样例过了
查看原帖
请问这个代码哪里错了,样例过了
384104
kky19950219楼主2022/6/18 16:20
#include<bits/stdc++.h>
using namespace std;
const int INF=1e86;
int sq1[1003][1003],sq2[1003][1003];
bool vis[1003];
int dis[1003],sum;
int n,m;
void dijkstra1(int o)
{
	int k,minn;
	for(int i=1;i<=n;i++) dis[i]=INF
	dis[o]=0;
	for(int i=1;i<=n;i++)
	{
		minn=INF;
		for(int j=1;j<=n;j++)
		{
			if(!vis[j]&&minn>dis[j])
			{
				minn=dis[j];
				k=j;
			}
		}
		vis[k]=true;
		for(int j=1;j<=n;j++)
		{
			if(sq1[k][j]>0&&!vis[j]&&dis[k]+sq1[k][j]<dis[j])
			{
				dis[j]=dis[k]+sq1[k][j];
			}
		}
	}
} 
void dijkstra2(int o)
{
	int k,minn;
	for(int i=1;i<=n;i++) dis[i]=INF;
	dis[o]=0;
	for(int i=1;i<=n;i++)
	{
		minn=INF;
		for(int j=1;j<=n;j++)
		{
			if(!vis[j]&&minn>dis[j])
			{
				minn=dis[j];
				k=j;
			}
		}
		vis[k]=true;
		for(int j=1;j<=n;j++)
		{
			if(sq2[k][j]>0&&!vis[j]&&dis[k]+sq2[k][j]<dis[j])
			{
				dis[j]=dis[k]+sq2[k][j];
			}
		}
	}
} 
int main()
{
	cin>>n>>m;
	for(int i=1;i<=m;i++)
	{
		int a,b,c;
		cin>>a>>b>>c;
		sq1[a][b]=c;
		sq2[b][a]=c;
	}
	dijkstra1(1);
	memset(vis,false,sizeof(vis));
	for(int i=2;i<=n;i++)
	{
		sum+=dis[i];
	}
	memset(dis,0,sizeof(dis));
	dijkstra2(1);
	for(int i=2;i<=n;i++)
	{
		sum+=dis[i];
	}
	cout<<sum;
	return 0;
}
2022/6/18 16:20
加载中...