POJ 2253 (坚持不看题解= =) 最短路

这道题被分类到最短路之下了,但是初次看题的时候想到的是最小生成树(最小瓶颈树)

后来写着写着发现有点飘,不像是能A题的代码,就放弃了,后来又换了一种直接DFS回溯的办法。。但是写着写着就觉得,这尼玛写出来不就是最短路嘛。。

然后floyd三个for循环解决了。

初始化的时候像最短路一样初始化

因为这是个 dp,最好想清楚dp的内容代表什么

d[i][j] 代表 i 到 j 的路径上最小的最大距离

转移就方便了 

d[i][j]=min(d[i][j],max(d[i][k],d[k][j]));

#include
#include
#include
#include
#include
using namespace std;
#define MAX 1003
#define MS(x) memset(x,0,sizeof(x))
double d[MAX][MAX];

int x[MAX];
int y[MAX];
int main()
{
	int n;
	int T=0;
	while(cin>>n&&n!=0)
	{
		MS(d);
		for(int i=0;i>x[i]>>y[i];
			for(int j=0;j


因为只是求 d[0][1] 那我把 floyd 改成 Bellman-Ford 也能过,原理是一样的

#include
#include
#include
#include
#include
using namespace std;
#define MAX 1003
#define MS(x) memset(x,0,sizeof(x))
double d[MAX][MAX];
double dist[MAX];
int x[MAX];
int y[MAX];
int main()
{
	int n;
	int T=0;
	while(cin>>n&&n!=0)
	{
		MS(d);
		for(int i=1;i>x[i]>>y[i];
			for(int j=0;j


你可能感兴趣的:(最短路,ACM)