最短路练习一(水题)

 

目录

HDU1874(Floyd解决)

HDU2544(Floyd解决)

HDU1548(Floyd解决)


HDU1874(Floyd解决)

#include
#include
using namespace std;
const int inf = 0x3f3f3f3f;
const int maxn = 205;

int n, m, dis[maxn][maxn];

void Floyd(){
    for(int k=0; k dis[i][k]+dis[k][j])
                    dis[i][j] = dis[i][k] + dis[k][j];
}

int main(){
    while(~scanf("%d%d", &n, &m)){
        for(int i=0; i

HDU2544(Floyd解决)

#include
#include
using namespace std;
const int inf = 0x3f3f3f3f;
const int maxn = 205;

int n, m, dis[maxn][maxn];

void Floyd(){
    for(int k=1; k<=n; k++)
        for(int i=1; i<=n; i++)
            for(int j=1; j<=n; j++)
                if(dis[i][j] > dis[i][k]+dis[k][j])
                    dis[i][j] = dis[i][k] + dis[k][j];
}

int main(){
    while(~scanf("%d%d", &n, &m) &&n&&m){
        for(int i=1; i<=n; i++){
            for(int j=1; j<=n; j++)
                dis[i][j] = inf;
            dis[i][i] = 0;
        }
        
        while(m--){
            int a, b, c;
            scanf("%d%d%d", &a, &b, &c);
            int x = min(dis[a][b], c);
            dis[a][b] = dis[b][a] = x;
        }
        
        Floyd();
        
        int s, t;
        printf("%d\n", dis[1][n]);
    }
    return 0;
}

HDU1548(Floyd解决)

#include
#include
using namespace std;
const int num = 205;
const int inf = 0x3f3f3f3f;

int n, a, b, x;
int dis[num][num];
void floyd(){
	for(int k=1; k<=n; k++)
		for(int i=1; i<=n; i++)
			for(int j=1; j<=n; j++)
				if(dis[i][j] > dis[i][k]+dis[k][j])
					dis[i][j] = dis[i][k]+dis[k][j];
}

int main(){
	while(~scanf("%d", &n) && n){
		for(int i=0; i= 1)	dis[i][i-x] = 1;
		}
		floyd();
		
		if(dis[a][b] < inf)	printf("%d\n", dis[a][b]);
		else				printf("-1\n");
	}
	return 0;
}

 

你可能感兴趣的:(刷题,#,最短路)