hdu 1584蜘蛛牌(DFS)
生活随笔
收集整理的這篇文章主要介紹了
hdu 1584蜘蛛牌(DFS)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
蜘蛛牌
Time Limit: 10000/5000 MS (Java/Others)????Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2364????Accepted Submission(s): 1015
Problem Description 蜘蛛牌是windows xp操作系統自帶的一款紙牌游戲,游戲規則是這樣的:只能將牌拖到比她大一的牌上面(A最小,K最大),如果拖動的牌上有按順序排好的牌時,那么這些牌也跟著一起移動,游戲的目的是將所有的牌按同一花色從小到大排好,為了簡單起見,我們的游戲只有同一花色的10張牌,從A到10,且隨機的在一行上展開,編號從1到10,把第i號上的牌移到第j號牌上,移動距離為abs(i-j),現在你要做的是求出完成游戲的最小移動距離。
Input 第一個輸入數據是T,表示數據的組數。
每組數據有一行,10個輸入數據,數據的范圍是[1,10],分別表示A到10,我們保證每組數據都是合法的。
Output 對應每組數據輸出最小移動距離。
Sample Input 1 1 2 3 4 5 6 7 8 9 10
Sample Output 9
Author xhd
AC代碼:
#include<iostream> #include<cstring> #include<cmath> using namespace std; int a[11],b[11],m; int DFS(int x,int y) {int i,j;if(x>m) return 0;if(y==9){m=x;return 0;} for(i=1;i<10;i++){if(!b[i]){for(j=i+1;j<=10;j++){if(!b[j]){b[i]=1;DFS(x+abs(a[j]-a[i]),y+1);break;}}b[i]=0;}}return 0; } int main() {int T,s;scanf("%d",&T);while(T--){for(int i=1;i<=10;i++){scanf("%d",&s);a[s]=i;}memset(b,0,sizeof(b));m=50;DFS(0,0);printf("%d\n",m);}return 0; }只想說細心(*^__^*) ……與50位技術專家面對面20年技術見證,附贈技術全景圖
總結
以上是生活随笔為你收集整理的hdu 1584蜘蛛牌(DFS)的全部內容,希望文章能夠幫你解決所遇到的問題。