程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> HDU1595(枚舉+最短路(dijkstra))

HDU1595(枚舉+最短路(dijkstra))

編輯:C++入門知識

題意不多說了。。思路就是先走一遍dijkstra,然後p數組記錄下路徑,然後枚舉路徑上的邊刪去之後走dijkstra得到的最短路(想想為什麼?我當時做的時候是枚舉了圖每條邊,然後就超時),取最大值。


#include 
#include 
#include 
#include 
#include 
#include 
#define maxn 1005
#define INF 999999999
using namespace std;

int n,m;
int map[maxn][maxn];
int dis[maxn];
int vis[maxn];
int p[maxn];

void dijkstra(int f)
{
    int i,j,mini,flag;
    for(i=1;i<=n;i++)
        dis[i]=INF;
    dis[1]=0;
    memset(vis,0,sizeof(vis));
    for(i=1;i<=n;i++)
    {
        mini=INF;
        for(j=1;j<=n;j++)
        {
            if(!vis[j] && dis[j]l)
            {
                map[u][v]=map[v][u]=l;
            }
        }
		dijkstra(1);
		int Max=dis[n];
		for(int i=n;i!=1;i=p[i])
		{
			int t=map[i][p[i]];
			map[i][p[i]]=map[p[i]][i]=INF;
			dijkstra(0);
			Max=max(Max,dis[n]);
			map[i][p[i]]=map[p[i]][i]=t;
		}
        printf("%d\n",Max);
    }
    return 0;
}



/*

5 6
1 2 4
1 3 3
2 3 1
2 4 4
2 5 7
4 5 1

6 7
1 2 1
2 3 4
3 4 4
4 6 4
1 5 5
2 5 2
5 6 5

5 7
1 2 8
1 4 10
2 3 9
2 4 10
2 5 1
3 4 7
3 5 10

*/


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved