首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

uva 125 - Numbering Paths(Warshall求解途径总数)

2013-10-17 
uva 125 - Numbering Paths(Warshall求解路径总数)题目链接:125 - Numbering Paths题目大意:给出一个有向

uva 125 - Numbering Paths(Warshall求解路径总数)

题目链接:125 - Numbering Paths


题目大意:给出一个有向图,然后问说每个点到其他所有点可选的路径有多少条。


解题思路:Warshall算法的模板题。


#include <stdio.h>#include <string.h>#define max(a,b) (a)>(b)?(a):(b)const int N = 1005;int r, n, g[N][N];void init() {r = 0;int a, b;memset(g, 0, sizeof(g));for (int i = 0; i < n; i++) {scanf("%d%d", &a, &b);g[a][b] = 1;r = max(max(a, b), r);}}void warshall() {for (int k = 0; k <= r; k++)for (int i = 0; i <= r; i++)for (int j = 0; j <= r; j++)g[i][j] += g[i][k] * g[k][j];for (int k = 0; k <= r; k++) {if (g[k][k]) {for (int i = 0; i <= r; i++) {for (int j = 0; j <= r; j++)if (g[i][k] && g[k][j]) g[i][j] = -1;}}}}void put() {for (int i = 0; i <= r; i++) {for (int j = 0; j < r ; j++)printf("%d ", g[i][j]);printf("%d\n", g[i][r]);}}int main () {int cas = 0;while (scanf("%d", &n) == 1) {init();warshall();printf("matrix for city %d\n", cas++);put();}return 0;}


热点排行