ZOJ-3166

来源:互联网 发布:网络消费投诉电话 编辑:程序博客网 时间:2024/06/08 05:10

找经过某些特定点的最小环,floyd一遍就完事了

#include<stdio.h>#include<string.h>#include<limits.h>int main(){int n, m, c, hotel[100], map[101][101];while (scanf("%d %d", &n, &c) != EOF){int i, j, k, a, b, d;for (i = 0; i < c; i++)scanf("%d", &hotel[i]);memset(map, 0, sizeof(map));for (i = 1; i <= n; i++)for (j = 1; j <= n; j++)map[i][j] = i == j ? 0 : INT_MAX;scanf("%d", &m);while (m--){scanf("%d %d %d", &a, &b, &d);map[a][b] = d;}for (k = 1; k <= n; k++)for (i = 1; i <= n; i++)for (j = 1; j <= n; j++)if (map[i][k] != INT_MAX && map[k][j] != INT_MAX&& map[i][k] + map[k][j] < map[i][j])map[i][j] = map[i][k] + map[k][j];int res = 0, min = INT_MAX;for (k = 0; k < c; k++){i = hotel[k];for (j = 1; j <= n; j++)if (i != j && map[i][j] != INT_MAX && map[j][i] != INT_MAX&& map[i][j] + map[j][i] < min){min = map[i][j] + map[j][i];res = i;}}if (res)printf("%d\n", res);elseputs("I will nerver go to that city!");}return 0;}


0 0
原创粉丝点击