DFS 蜘蛛紙牌(深度解析)

2021-10-01 06:59:44 字數 1169 閱讀 2316

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

思路如下:
這一題 我們可以的 pos_card,去儲存 每張牌的位置,然後我們通過深搜 去遍歷每一種 符合題意的移動的情況(理解不通直接看**)。

題解如下:
#include

#include

#include

using namespace std;

int pos_card[15]

;//用來儲存某張牌的位置

int mark[15]

;//用來做標記用的,

int min_sum;

//用來記錄最小的移動距離

void

dfs(

int k,

int sum)

//進行了k次對牌的移動操作,最當前小移動距離為sum

for(

int i=

1;i<

10;i++

)//這裡的 i 表示是牌上的數字(就是要被 移動的牌)

} mark[i]=0

;//回溯清除標記,進行下一種情況的嘗試(這個需要自己理解)}}

}int

main()

dfs(0,

0); cout<}return0;

}

蜘蛛牌 (DFS應用)

並不太理解其中原理。蜘蛛牌是windows xp作業系統自帶的一款紙牌遊戲,遊戲規則是這樣的 只能將牌拖到比她大一的牌上面 a最小,k最大 如果拖動的牌上有按順序排好的牌時,那麼這些牌也跟著一起移動,遊戲的目的是將所有的牌按同一花色從小到大排好,為了簡單起見,我們的遊戲只有同一花色的10張牌,從a到...

hdu 蜘蛛牌(經典DFS)

problem description 蜘蛛牌是windows xp作業系統自帶的一款紙牌遊戲,遊戲規則是這樣的 只能將牌拖到比她大一的牌上面 a最小,k最大 如果拖動的牌上有按順序排好的牌時,那麼這些牌也跟著一起移動,遊戲的目的是將所有的牌按同一花色從小到大排好,為了簡單起見,我們的遊戲只有同一花...

DFS 深度優先遍歷搜尋解析)

深度優先搜尋思想 深度優先搜尋遍歷類似於樹的先序遍歷。假定給定圖g的初態是所有頂點均未被訪問過,在g中任選乙個頂點i作為遍歷的初始點,則深度優先搜尋遞迴呼叫包含以下操作 1 訪問搜尋到的未被訪問的鄰接點 2 將此頂點的visited陣列元素值置1 3 搜尋該頂點的未被訪問的鄰接點,若該鄰接點存在,則...