UVa 125
来源:互联网 发布:splay tree java 编辑:程序博客网 时间:2024/05/16 01:44
題目:已知一些單向道路,求個城市間的路徑有多少種,存在環衛-1(無窮)。
分析:圖論、最短路。利用floyd算法求出路徑條數,然後判斷無窮。
如果從a城市可以到達b城市,並且從b城市也可以到達a城市,則存在環;
再利用floyd更新所有存在環的路徑。
說明:吐槽一下沒有給節點數目(⊙o⊙)…
#include <stdio.h>#include <stdlib.h>#include <string.h>int matrix[505][505];int main(){int n, u, v, cases = 0;while (~scanf("%d",&n)) {memset(matrix, 0, sizeof(matrix));int max = 0;for (int i = 0; i < n; ++ i) {scanf("%d%d",&u,&v);matrix[u][v] = 1;if (max < u) {max = u;}if (max < v) {max = v;}}// floydfor (int k = 0; k <= max; ++ k) {for (int i = 0; i <= max; ++ i) {for (int j = 0; j <= max; ++ j) {matrix[i][j] += matrix[i][k]*matrix[k][j];}}}// get -1for (int i = 0; i <= max; ++ i) {for (int j = 0; j < i; ++ j) {if (matrix[i][j] > 0 && matrix[j][i] > 0) {matrix[i][j] = -1;matrix[j][i] = -1;}}}// floydfor (int k = 0; k <= max; ++ k) {for (int i = 0; i <= max; ++ i) {for (int j = 0; j <= max; ++ j) {if (matrix[i][k] == -1 && matrix[k][j] != 0) {matrix[i][j] = -1;}if (matrix[i][k] != 0 && matrix[k][j] == -1) {matrix[i][j] = -1;}}}}printf("matrix for city %d\n",cases ++);for (int i = 0; i <= max; ++ i) {printf("%d",matrix[i][0]);for (int j = 1; j <= max; ++ j) {printf(" %d",matrix[i][j]);}printf("\n");}}return 0;}
0 0
- uva 125
- UVa 125
- uva 125 - Numbering Paths
- UVA - 125 Numbering Paths
- UVA 125 Numbering Paths
- uva 125(dp)
- uva 125Numbering Paths
- uva
- UVA
- UVA
- UVA
- uva
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- MySQL 数据库管理
- 用纯CSS创建一个三角形的原理是什么?
- NSIS 注册DLL OCX
- mysql "select command denied to user root" 问题解决
- windows下安装you-get的简要记录
- UVa 125
- 故障排查:是什么 导致了服务器端口telnet失败?
- String 详解
- HDU5135 Little Zu Chongzhi's Triangles(计算几何,枚举)
- sql语句优化
- 常见python错误(4,5,13,14,15,17点不错)
- Android studio 2.2 新建虚拟机
- Jquery和纯JS实现轮播图(一)--左右切换式
- Mybatis 出现Mapped Statements collection does not contain value for xxx