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...