C++20 Dijkstra 第7个点RE求助
查看原帖
C++20 Dijkstra 第7个点RE求助
1098596
WhiteNight__楼主2024/4/15 17:42
#include <iostream>
#include <cstdio>
#include <map>

using namespace std;

#define n 52

struct Edge{
	int dis , to , next;
}edge[10005];

int m , cnt , head[3000] , dis[3000] , ans = 0x7fffffff;
char anss;
bool vis[3000];

map <char , int> point;

inline void add (int &in , int &ou , int &dis)
{
	++cnt;
	edge[cnt].to = ou;
	edge[cnt].next = head[in];
	edge[cnt].dis = dis;
	head[in] = cnt;
}

void Dijkstra (int &in , char &h)
{
	for(int i = 1 ; i <= n ; i ++) dis[i] = 0x7fffffff , vis[i] = true;
	dis[in] = 0;
	
	long long cnr = in , minn = 0x7fffffff;
	
	while(vis[cnr])
	{
		vis[cnr] = false;
		for(int i = head[cnr] ; i ; i = edge[i].next)
		{
			if(dis[edge[i].to] > dis[cnr] + edge[i].dis) 
				dis[edge[i].to] = dis[cnr] + edge[i].dis;
		}
		minn = 0x7fffffff;
		cnr = 0;
		for(int i = 1 ; i <= n ; i ++)
		{
			if(vis[i] && dis[i] < minn)
			{
				cnr = i;
				minn = dis[i];
			}
		}
		if(cnr == 0) break;
	}
	
	if(dis[n] < ans)
	{
		ans = dis[n];
		anss = h;
	}
	
}

int main()
{
	for(char i = 'a' ; i <= 'z' ; i ++) point.insert(pair<char,int> (i,i - 'a' + 1));
	for(char i = 'A' ; i <= 'Z' ; i ++) point.insert(pair<char,int> (i,i - 'A' + 27));
	
	cin >> m;
	for(int i = 1 ; i <= m ; i ++)
	{
		char u , v;
		int len;
		cin >> u >> v >> len;
		
		add(point[u] , point[v] , len);
		add(point[v] , point[u] , len);
	}
	
	for(char i = 'A' ; i <= 'Y' ; i ++)
	{
		Dijkstra(point[i] , i);
	}
	
	cout << anss << " " << ans << "\n";
	
	return 0;
}

谢谢大佬

2024/4/15 17:42
加载中...