1003. Emergency (25)(floyd)

来源:互联网 发布:菲律宾跳水队 知乎 编辑:程序博客网 时间:2024/06/06 01:42

学习最短路径吧,这题不太适合用floyd 毕竟 n3 的复杂度 还是很伤的,但是还是把自己用 floyd 写的半残品记下来吧,以备不时之需。

#include <cstdio>#include <vector>int main(){    int N,M,C1,C2;    int value[501][501] = {0};    int change[501][501] = {0};    int cityValue[501] = {0};    scanf("%d %d %d %d",&N,&M,&C1,&C2);    for (int i = 0; i < N; i++)    {        int num;        scanf("%d",&num);        cityValue[i] = num;        for (int j = 0 ; j < N; j++)        {            value[i][j] = 65535;            value[i][i] = 0;            change[i][j] = j;        }    }    for (int i = 0; i < M; i++)    {        int c1,c2,tmp;        scanf("%d %d %d",&c1,&c2,&tmp);        value[c1][c2] = tmp;        value[c2][c1] = tmp;    }    for (int k = 0; k < N; k++)    {        for (int v = 0; v < N; v++)        {            for (int w = 0; w < N; w++)            {                if (value[v][w] > (value[v][k] + value[k][w]))                {                    value[v][w] = value[v][k] + value[k][w];                    change[v][w] = change[v][k];                }            }        }    }    for (int v = 0; v < N; v++)    {        for (int w = v + 1; w < N; w++)        {            printf("v%d-v%d weight: %d",v,w,value[v][w]);            int k = change[v][w];            printf("path : %d",v);            while(k!=w)            {                printf("-> %d",k);                k = change[k][w];            }            printf(" -> %d\n",w);        }        printf("\n");    }    return 0;}

很漂亮很简单的代码。

原创粉丝点击