博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
timus_1003_floyd_warshall
阅读量:6651 次
发布时间:2019-06-25

本文共 2636 字,大约阅读时间需要 8 分钟。

题目的意思:

  一条路径的起点和终点相同,就是一只「环」。

有向图的环,可以特地称作​​「有向环」;无向图的环,可以特地称作​​「无向环」。环上每个点都恰好连着两条边。

无向环以另一种角度来看,就是两条路径,两条路径的起点相同、终点也相同。

习惯规定一个环至少三个点。

  藉由Floyd-Warshall Algorithm 的过程,顺手穷举所有可能的最小环。代码如下:

#include 
#include
int n;//交叉点的数量int m;//路径的跳数int edge[101][101];//记录每条边的情况,以及使用情况int d[101][101];//记录顶点间距离int path[101][101];//记录路径int ans_path[101];//答案路径int ans_len;//记录路径的长度#define INFINITE 10000000int min = INFINITE;//源到源的最小路径长度//获得路径void get_path(int i, int j){ ans_path[ans_len ++] = j; if (i == j) return; get_path(i, path[i][j]);}int main(void){ int i, j, k, source, destination, distance, flag1; //输入数据 while (1) { scanf("%d", &n); if (n == -1) break; scanf("%d", &m); //初始化edge for (i = 1; i <= n; i ++) { edge[i][i] = INFINITE; path[i][i] = INFINITE; for (j = i; j <= n; j ++) edge[i][j] = edge[j][i] = INFINITE; } for (i = 0; i < m; i ++) { scanf("%d%d%d", &source, &destination, &distance); if (edge[source][destination] > distance) { edge[source][destination] = edge[destination][source] = distance; path[source][destination] = source; path[destination][source] = destination; } } min = INFINITE; memcpy(d, edge, sizeof(edge)); for (k = 1; k <= n; k ++) { for (i =1; i < k; i ++) for (j = 1; j < k; j ++) if (i != j) { if ( edge[k][i] + d[i][j] + edge[j][k] < min) { min = edge[k][i] + d[i][j] + edge[j][k]; ans_len = 0; ans_path[ans_len ++] = k; get_path(i, j); } } for (i = 1; i <= n; i ++) { for (j = 1; j <=n; j ++) { if (d[i][j] > d[i][k] + d[k][j]) { d[i][j] = d[i][k] + d[k][j]; path[i][j] = path[k][j]; } //printf("%d:%d ", d[i][j], path[i][j]); } // printf("\n"); } // printf("\n\n"); } if (min == INFINITE) printf("No solution.\n"); else { while (ans_len) printf("%d ", ans_path[-- ans_len]); printf("\n"); } } return 0;}

 

转载地址:http://wkjto.baihongyu.com/

你可能感兴趣的文章
BZOJ1061:[NOI2008]志愿者招募(费用流)
查看>>
Web前端优化最佳实践及工具集锦
查看>>
两个想法
查看>>
Spark Streaming揭秘 Day20 动态Batch size实现初探(上)
查看>>
无限极分类,传递一个父ID,返回所有子集
查看>>
最大匹配、最小顶点覆盖、最大独立集、最小路径覆盖(转)
查看>>
示波器X1探头和X10探头
查看>>
HDU 5795 A Simple Nim
查看>>
Centos7下配置Java web环境(JDK、Tomcat、Mysql)
查看>>
javascript导图 ...
查看>>
Liferay——代码调试(Debug)方法
查看>>
BZOJ 2929 网络流
查看>>
业务安全的一些实例
查看>>
【转】Windows(server2008)下使用VisualSVN Server搭建SVN服务器
查看>>
题解 P1000 【超级玛丽游戏】
查看>>
移动端html5页面导航栏悬浮遮挡内容第一行解决办法
查看>>
Linux非阻塞IO(六)使用poll实现非阻塞的服务器端
查看>>
JS设置CSS样式的几种方式
查看>>
asp.net网站Application_Start疑是不执行的现象
查看>>
信号量同步编程
查看>>