dijkstra求调
查看原帖
dijkstra求调
516867
SZnP楼主2022/7/4 20:23

RT,

#include <bits/stdc++.h>
using namespace std;
int i,graph[10][10],dis[100],Begin,End,dx[10],temp,temp2,temp3,temp4,check[10],checklen,minn,mini,n;
const int INF=2e9;
bool vis[100];
int main()
{
	dx[1]=2;dx[2]=6;dx[3]=4;dx[4]=8;dx[5]=6;dx[6]=10;dx[7]=14;
	for(i=0;i<10;i++)
	for(int j=0;j<10;j++)
	{
		if(i==j)graph[i][j]=0;else
		graph[i][j]=INF;
	}
	for(i=0;i<100;i++)
	dis[i]=INF;
	for(i=1;i<=7;i++)
	{ 
		cin>>temp;
		dx[i]=dx[i]/(temp+1);
	}
	scanf("%d%d%d",&Begin,&End,&temp);
	for(i=0;i<temp;i++)
	{
		scanf("%d%d%d",&temp2,&temp3,&temp4);
		graph[temp2][temp3]=min(graph[temp2][temp3],temp4);
	}
    //核心部分
	vis[Begin]=true;
	dis[Begin]=0;
	while(!vis[End])
	{
		for(int i=1;i<=temp;i++)
		if(graph[Begin][i]!=INF&&!vis[i])
		{
			if(dis[i]>dis[Begin]+graph[Begin][i])dis[i]=dis[Begin]+graph[Begin][i];
		}
		minn=INF;
		for(i=1;i<=temp;i++)
		{
			if(!vis[i]&&dis[i]<minn){minn=dis[i];mini=i;}
		}
		Begin =mini;
		vis[Begin]=true;
	}
	cout<<dis[End];
	return 0;
}
2022/7/4 20:23
加载中...