最短路Dijksta演算法溫故

2021-08-16 05:03:34 字數 2153 閱讀 4855

poj2387

最基本得最短路問題,雙向圖,無負權迴路,可以用來熟悉一下自己得思路,和預處理得過程

#include #include #define inf 0x3f3f3f3f

using namespace std;

const int maxn = 1010;

int mp[maxn][maxn];

int dis[maxn];

int vis[maxn];

int n,t;

void init(int n)

vis[i] = 0;

}}void dijkstra(int s,int e)

}if(minlen == inf)break;

vis[net] = 1;

for(int j = 1;j <= n;j++)}}

}int main()

dijkstra(1,n);

printf("%d\n",dis[n]);

}return 0;

}

本來習慣用memset,其實在預處理mp得時候,就可以順帶著處理vis清零得問題

在dijksta演算法中,以**節點1為起點預處理dis陣列,含義是j點到**節點的最短距離

第二次i得for迴圈是迴圈的鬆弛次數,所以可能已經鬆弛完畢,你需要判斷一下可以用minlen == inf 來判斷,也可以預處理net = 0,在進行一次篩選點的時候,出來發現net任然是0也可以判斷是鬆弛完畢

poj2253

這個題題意我就理解了半天是真的半天,青蛙要從石頭1跳到石頭2,需要借助其他的石頭,那麼我們肯定有不止一條路,面對這個多的路,每一條路都有乙個最大的跳躍距離比如1跳到3距離為99,3跳到2距離為66,那麼這條路徑得最大跳躍距離是99,問你所有路徑中最大跳躍路徑得最小值~~

這裡求得並不是dis[2]最短路了,而是dis[2]所有路徑中最大路徑中的最小值,所以我dis得意義也被改變了,dis【i】表示得是從1到i節點的所有路徑中最短的跳躍路徑

也就是普通的dijkstra演算法求得net點時,一層for迴圈尋找可以優化得j點

『那麼dis[j] = min(dis[j],max(dis[net],mp[net][j]))

右邊的max裡dis【net】表示得所有得到net點的路徑方案中最小的跳躍距離,那麼這些路徑再通乙個j點加上了mp【net】【j】時,dis【j】得結果可能時dis【j】也有可能會因此變小

可能還時有點不理解為什麼內部時max而不是min,那就來分類討論一下,如果在原來的所有的路徑上,我加上了mp[net][j]那麼如果mp[net][j]就會時原來所有路徑得一部分,乙個結尾,如果這個結尾比dis[net]大那就代表由net到j最大跳躍距離要跟新了,因為原來的那個值(dis[net])並不是那一條路徑上的最大跳躍距離了,所以更新了,如果比dis[net]小,那就不必更新直接去比較就好~~

#include #include #include #include #define inf 0x3f3f3f3f

using namespace std;

const int maxn = 210;

double mp[maxn][maxn];

double stone[maxn][2];

double dis[maxn];

int vis[maxn];

int n;

double far(double ax,double ay,double bx,double by)

void dijkstra(int s)

}if(net == 0)break;

vis[net] = 1;

for(int j = 1;j <= n;j++)}}

/*現在要求求出所有通路的最大距離,

並把這些最大距離作比較,

把最小的乙個最大距離作為青蛙的最小跳遠距離。*/

}int main()

for(int i = 1;i <= n;i++)

vis[i] = 0;

dis[i] = inf;

}dijkstra(1);

printf("scenario #%d\nfrog distance = %.3lf\n\n",cas++,dis[2]);

}return 0;

}

最短路徑演算法 最短路

在每年的校賽裡,所有進入決賽的同學都會獲得一件很漂亮的t shirt。但是每當我們的工作人員把上百件的衣服從商店運回到賽場的時候,卻是非常累的!所以現在他們想要尋找最短的從商店到賽場的路線,你可以幫助他們嗎?input 輸入包括多組資料。每組資料第一行是兩個整數n m n 100,m 10000 n...

最短路演算法

常用的最短路演算法有三種 disjkstra,floyd,ballman floyd 一 disjkstra演算法 dijkstra演算法要求圖上的權非負數。同樣使用於無向圖 html view plain copy include stdio.h hdu 2544 define maxsum 0x...

最短路演算法

最短路演算法有很多,具體哪個好,和資料是有很大關係的 從起點開始向外擴充套件,最壞o v e 實際體驗比o e log v 的dijkstra可能快 include include define max e 4002 define max v 1002 define inf 0x3f3f3f usi...