TYVJ1288 飄飄乎居士取能量塊

2021-07-10 04:23:47 字數 1420 閱讀 9944

9月21日,今天是pink的生日,飄飄乎居士當然要去別人的領土大鬧一番啦!

為了收集更多的能量到pink家大鬧,飄飄乎居士準備從後花園中取出自己多年積攢的p個能量塊。後花園一共被劃分n個地區,能量塊被分散在裡面,現在飄飄乎居士拿出地圖,發現自己站在1的地方,而他要做的就是用最短的路程把所有的能量塊取出,並且最後走到位於n的出口處,而飄飄乎居士一直是個懶人,他想知道最少要走多少路程才能夠取到所有的能量塊,並且走到出口

第一行乙個正整數n,表示花園被劃分成了n個地區

接下來乙個n*n的矩陣,代表個點之間的相互距離,資料保證從i走到i沒有路程

在下來乙個整數p,表示一共有p個能量塊

接下來一行,表示各個能量塊的位置,資料保證1和n沒有能量塊,且每個地區最多乙個能量塊

對於所有的資料 0乙個數,飄飄乎居士所要行走的最小距離

//搜尋 全排列       ↑題名字真詭異 

#include#include#include#includeusing namespace std;

int n,p;

int a[200][200];//鄰接表

int pos[50];//能量塊位置

int minda=9999999;//儲存最優解

int sum=0;

int main()

scanf("%d",&p);

for(i=1;i<=p;i++)scanf("%d",&pos[i]);//讀入能量塊位置

//floyd演算法求最短距離

int k;

for(k=1;k<=n;k++)

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

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

if(a[i][j]>a[i][k]+a[k][j])

a[i][j]=a[i][k]+a[k][j];

//以上

pos[0]=1;

sort(pos+1,pos+p+1);//從小到大排序能量塊位置,很神奇,加了這句話就ac

//後面函式可能不生效(p不夠大時),所以先算一遍

sum=0;

for(i=1;i<=p;i++)

sum+=a[pos[p]][n];

if(minda>sum)minda=sum;

//while(next_permutation(pos+1,pos+p+1))

sum+=a[pos[p]][n];

if(minda>sum)minda=sum;

}cout總之就是要最短路徑遍歷1區,n區,每個能量塊所在的區

這個next_permutation函式簡直好用,省了一番功夫

不用的話,還得自己寫乙個dfs求全排列

原本的思路是把所有能量塊位置+1點+n點一起構成乙個新的圖,之後發現並不需要,直接在原有a圖里做即可

↑另外構建新圖可能會導致一些不必要的資料錯位

12 8 8 可見與隱藏

1 超出範圍 overflow屬性 1.visble 表示層的大小和內容都會自動顯示出來 2.auto 表示在只在內容超出層的範圍時才顯示滾動條 3.hidden 表示會隱藏超出層範圍的內容 4.scroll 表示從事顯示滾動條。2 可見屬性 visibility 1.inherit 表示繼承父物件...

1288 幸運轉盤(一)

傳說中每乙個人都有乙個幸運轉盤,在人生的某些特殊時刻,我們會在睡夢中 良好睡眠哦 悄悄的轉動自己的幸運轉盤,轉盤的結果會影響著自己的心情,並改變自己的命運。現在到你旋轉幸運轉盤的時候了,你有乙個m m的轉盤,並且有t次機會轉動它,每一次轉動,你可以選擇它的轉動方向,並讓它相對於上一次轉動一定的角度。...

tyvj 叢林探險

東非大裂谷中有一片神秘的叢林,是全世界探險家的樂園,著名黃 探險家bb一直想去試試。正好我國科學家2005年4月將首次對東非大裂谷進行科考,bb決定隨科考隊去神秘叢林探險。在出發之前,他蒐集了國內外有關神秘叢林探險的資料,並繪製成一張地圖 該地圖上有若干安全點 包括入口點和出口點 並將這些安全點編號...