floyed演算法(o(n^3))
dijkstra (適合稠密圖)
spfa:優點是可以處理負權值,但是不能處理負環,使用前最好先判斷是否有負環(適合稀疏圖)(還不熟)*
會用到的存圖方法:
鄰接矩陣
鄰接表前向星(待學)
1.mpi maelstrom poj1502 (無向圖)
題目在此
一開始看錯了題意,以為需要對所有dis求和,實際上只需要取最大值
stoi不能用,可以用atoi(char*轉化成int)
**:
#include
#include
#include
#include
#include
#include
using
namespace std;
const
int max =
105;
const
int inf =
0x3f3f3f
;int n,ans;
int dis[max]
;//表示從起點到i的最短距離
bool vis[max]
;//vectorv[max];
int adj[max]
[max]
;int x, mindis;
void
init()
*/for
(int i =
1; i <= n; i++)}
dis[1]
=0;}
intmain()
}}for(
int i =
1; i <= n; i++)}
vis[x]=1
;for
(int j =
1; j <= n; j++)}
}for
(int i =
1; i <= n; i++
) cout << ans << endl;
return0;
}
2.cow contest poj3660 (floyed演算法)
題目在此
看了一眼題解豁然開朗,用floyed鬆弛
用memset只適合置0/-1/0x3f3f3f3f
**:
#include
#include
#include
#include
#include
#include
using
namespace std;
const
int max =
105;
const
int inf =
0x3f3f3f
;int adj[max]
[max]
;int
main()
}int n, m;
cin >> n >> m;
for(
int i =
1; i <= m; i++
)for
(int j =
1; j <= n; j++)}
}}int ans =0;
for(
int i =
1; i <= n; i++)if
(sum == n -1)
//和其他所有牛都能比較,他就贏了
ans++;}
cout << ans << endl;
return0;
}
3.tram poj1847
只要能看出是最短路就比較簡單,不搬開關權值是0,搬開關權值是1
題目在此
**:
#include
#include
#include
#include
#include
#include
#include
using
namespace std;
const
int max =
105;
const
int inf =
0x3f3f3f3f
;int adj[max]
[max]
,dis[max]
,ans,n;
bool vis[max]
;int x, mindis,a,b;
struct node
;vector mp[max]
;void
init()
dis[a]=0
;memset
(adj, inf,
sizeof
(adj));
}int
main()
}for
(int i =
1; i <= n; i++)}
vis[x]=1
;for
(int j =
1; j <= n; j++)}
}if(dis[b]
== inf)
puts
("-1");
else
cout << dis[b]
<< endl;
return0;
}
4.silver cow party poj3268
**在此
**:
#include
#include
#include
#include
#define max 1005
const
int inf =
0x3f3f3f
;using
namespace std;
int adj[max]
[max]
, dis[max]
, ret[max]
;int a[max]
, b[max]
;bool vis[max]
;void
init
(int n,
int x)
dis[x]=0
; ret[x]=0
;}intmain()
}//城鎮數,路數,party城
for(
int i =
1; i <= m; i++
)/*for (int i = 1; i <= n; i++)
cout << endl;
} cout << endl << endl;*/
for(
int i =
1; i <= n; i++)}
vis[t]=1
;for
(int j=
1;j<=n;j++)}
for(
int i =
1; i <= n; i++
) a[x]=0
;//a表示從x回來的距離
//到此為止正過程結束
for(
int i =
1; i <= n; i++)}
init
(n, x)
;/*for (int i = 1; i <= n; i++)
cout << endl;
}*/for(
int i =
1; i <= n; i++)}
vis[t]=1
;for
(int j =
1; j <= n; j++)}
for(
int i =
1; i <= n; i++
) b[x]=0
;int ans =0;
for(
int i =
1; i <= n; i++
) cout << ans << endl;
return0;
}
演算法訓練 最短路
問題描述 給定乙個n個頂點,m條邊的有向圖 其中某些邊權可能為負,但保證沒有負環 請你計算從1號點到其他點的最短路 頂點從1到n編號 輸入格式 第一行兩個整數n,m。接下來的m行,每行有三個整數u,v,l,表示u到v有一條長度為l的邊。輸出格式 共n 1行,第i行表示1號點到i 1號點的最短路。樣例...
訓練 最短路 01
time limit 1000msmemory limit 32768kb64bit io format i64d i64u description 某省自從實行了很多年的暢通工程計畫後,終於修建了很多路。不過路多了也不好,每次要從乙個城鎮到另乙個城鎮時,都有許多種道路方案可以選擇,而某些方案要比另...
演算法訓練 最短路
最近在學習一些常見的演算法,演算法這東西不練是不行的,所以學習的同時也找了些題來練。我找的題目 於 vjudge 上的 kuangbin帶你飛專題訓練。每做完乙個專題,我都會寫一篇部落格整理一下這個專題。現在這個專題是,圖論中的最短路。最短路相關的演算法有很多,在專題訓練中會用到的有 dijkstr...