題目描述 description
某鄉有n個村莊(1輸入描述 input description
村莊數n和各村之間的路程(均是整數)
輸出描述 output description
最短的路程
樣例輸入 sample input
0 2 1
1 0 2
2 1 0
樣例輸出 sample output
資料範圍及提示 data size & hint
本題可用最短路思想、搜尋來解決,但是可能無法通過一組極限資料(且效率較低)。建議按樹狀dp考慮!
/*view code不會什麼樹形dp,我做的是spfa(其實floyed就可以)+深搜+剪枝
首先將邊反向,spfa處理所有點到1的距離,以備剪枝使用
然後深搜得到答案
剪枝:利用spfa得到的距離,當當前的dis+(n-t)*minn+f[x]>ans時,剪枝
(minn是矩陣中的最短距離,n-t是還有幾步可以遍歷完所有的村莊)
*/#include
#include
#include
#include
#define m 20
#define inf 3000000
using
namespace
std;
int map[m][m],f[m],n,ans=inf,min1=inf;
inta2[m][m];
bool
vis[m];
queue
q;intread()
while(c>='
0'&&c<='9')
return num*flag;
}void dfs(int x,int t,int
dis)
for(int i=1;i<=n;i++)
if(!vis[i])
}void
spfa()}}
}int
main()
spfa();
memset(vis,
0,sizeof
(vis));
vis[
1]=1
; dfs(
1,1,0
); printf("%d
",ans);
return0;
}
售貨員的難題
售貨員的難題 5000 ms 65535 kb 675 3441 tags 動態規劃 某鄉有n個村莊 1 n 20 有乙個售貨員,他要到各個村莊去售貨,各村莊之間的路程s 0 s 1000 是已知的,且a村到b村與b村到a村的路大多不同。為了提高效率,他從商店出發到每個村莊一次,然後返回商店所在的村...
售貨員的難題
售貨員的難題 5000 ms 65535 kb 675 3441 tags 動態規劃 某鄉有n個村莊 1 n 20 有乙個售貨員,他要到各個村莊去售貨,各村莊之間的路程s 0 s 1000 是已知的,且a村到b村與b村到a村的路大多不同。為了提高效率,他從商店出發到每個村莊一次,然後返回商店所在的村...
售貨員的難題
某鄉有n個村莊 1 n 20 有乙個售貨員,他要到各個村莊去售貨,各村莊之間的路程s 0 s 1000 是已知的,且a村到b村與b村到a村的路大多不同。為了提高效率,他從商店出發到每個村莊一次,然後返回商店所在的村,假設商店所在的村莊為 1,他不知道選擇什麼樣的路線才能使所走的路程最短。請你幫他選擇...