POJ1734 Sightseeing Trip
来源:互联网 发布:怎么做好淘宝网店 编辑:程序博客网 时间:2024/06/04 23:18
题目大意:给定N个点和M条边的无向图,求出其中存在的最小环。
数据范围:N<=100,M<=10000。
思路:
-有向图求最小环,令dist[i,i]=+∞,然后floyd求最短路即可。
-无向图求最小环,先进行floyd,在最外层循环开始进行k时,用map[i][k]+map[k][j]+dist[i][j]来更新最小环。注意:
-题目中存在重边,需要取最小值。
-需要在floyd之前更新最小环,这样才能保证这样保证了从i到j这条路不经过k。在程序中:
-map[ ]记录原始距离,dist[ ]记录最短路,path[ ]记录最短路上的点,num记录最短路上点的个数。
-pre[ ][ ]记录两点之间的中转点,初始化为后面的下标。record( )给path[ ]赋值,当pre[ ][ ]的值等于后面的下标时,说明已经到了端点,退出,再弥补未记录的点。程序如下:
#include<iostream>#include<cstring>using namespace std;const int maxn=110;const int bignum=10000000;int map[maxn][maxn],n,m,num;int pre[maxn][maxn],dist[maxn][maxn],path[maxn];void init(){ cin>>n>>m; memset(pre,-1,sizeof(pre)); for (int i=1;i<=n;++i) { for (int j=1;j<=n;++j) { map[i][j]=dist[i][j]=map[j][i]=dist[j][i]=bignum; } } int u,v,len; for (int i=1;i<=m;++i) { cin>>u>>v>>len; if (map[u][v]>len) { map[u][v]=map[v][u]=dist[u][v]=dist[v][u]=len; pre[u][v]=v; pre[v][u]=u; } } }void record(int i,int j){ int k=pre[i][j]; if(k==j) { path[++num]=j; return ; } record(i,k); record(k,j);}void floyd(){ int i,j,k; int ans=bignum; for (k=1;k<=n;++k) { for (i=1;i<k;++i) for (j=i+1;j<k;++j) { if (map[i][k]+map[k][j]+dist[i][j]<ans) { ans=map[i][k]+map[k][j]+dist[i][j]; num=0; path[++num]=i; record(i,j); path[++num]=k; } } for (i=1;i<=n;++i) for (j=1;j<=n;++j) { if (dist[i][k]+dist[k][j]<dist[i][j]) { dist[i][j]=dist[i][k]+dist[k][j]; pre[i][j]=k; } } } if (ans==bignum) { cout<<"No solution."; } else { for (i=1;i<=num-1;++i) cout<<path[i]<<" "; cout<<path[num]; } }int main(){ init(); floyd(); return 0;}
0 0
- poj1734 - Sightseeing trip
- POJ1734 Sightseeing Trip
- poj1734 Sightseeing trip
- [poj1734]Sightseeing trip(Floyd)
- POJ1734 Sightseeing trip(最小环)
- POJ1734 Sightseeing trip【Floyd】【最小环】
- POJ1734 Sightseeing trip 【Floyd】+【最小环】+【路径记录】
- poj1734 Sightseeing trip(Floyd求最小环)
- POJ 1734 Sightseeing trip
- PKU1734 sightseeing trip
- POJ 1734-Sightseeing trip
- 【最小环】Sightseeing Trip
- BIT 1095 Sightseeing trip
- ural 1004 Sightseeing Trip
- URAL 1004: Sightseeing Trip
- 1734Sightseeing trip
- URAL 1004. Sightseeing Trip
- POJ_1734 Sightseeing trip(拓扑)
- 《Java程序设计》第三次作业:网络编程
- 共享内存简介
- C++中的public,protected,private继承
- 【基础练习】【字符串处理】codevs1264 芳香数题解
- Python学习笔记 类和对象
- POJ1734 Sightseeing Trip
- MySQL Daemon failed to start.
- iOS不规则控件的点击事件
- FATE(2159)
- GIS理论(墨卡托投影、地理坐标系、地面分辨率、地图比例尺、Bing Maps Tile System)
- Android获取设备型号和系统版本号、mac地址、IP、屏幕的分辨率
- [leetcode][bit] Number of 1 Bits
- Delphi 调用打印机指令ZPL实例--并口
- LeetCode | Count Primes