UVa 1343 旋轉遊戲(dfs IDA )

2022-06-20 23:36:13 字數 1160 閱讀 2664

題意:如圖所示,一共有8個1,8個2和8個3,如何以最少的移動來使得中間8個格仔都為同乙個數。

思路:狀態空間搜尋問題。

用ida*演算法的話會比較快,而且**比較簡潔。

ida*的關鍵就是要尋找乙個估價函式h(),在這道題目中,每次移動最多隻會使乙個格仔的數字正確,所以當maxd-d

1 #include2 #include

3 #include4 #include5

using

namespace

std;67

int position[8][7] =, , //

八個方向格仔的座標值

9 , ,

10 , ,

11 ,

12};

1314

int goal = ; //

目標狀態的座標

1516

int a[25

];17

char order[30]; //

記錄路徑

1819

bool is_goal() //

判斷是否已達到目標狀態

2025

return

true;26

}2728int h() //

算出不匹配的最小值

2937

return

8 -max( max(n1, n2),n3);38}

3940

void rotate(int k) //

往指定的方向移動

4147 a[position[k][6]] =temp;48}

4950

bool dfs(int d, int

maxd)

5163

return

false;64

}6566void

solve()

6773

for (int maxd = 1;; maxd++)

7481}82

}8384int

main()

8593

return0;

94 }

水題 字母旋轉遊戲

給定兩個整數m,n,生成乙個m n的矩陣,矩陣中元素取值為a至z的26個字母中的乙個,a在左上角,其餘各數按順時針方向旋轉前進,依次遞增放置,當超過26時又從a開始填充。例如,當m 5,n 8時,矩陣中的內容如下 a b c d e f g h v w x y z a b i u j k l m n...

2938 字母旋轉遊戲

描述給定兩個整數m,n,生成乙個m n的矩陣,矩陣中元素取值為a至z的26個字母中的乙個,a在左上角,其餘各數按順時針方向旋轉前進,依次遞增放置,當超過26時又從a開始填充。例如,當m 5,n 8時,矩陣中的內容如下 a b c d e f g h v w x y z a b i u j k l m...

POJ 3752 字母旋轉遊戲

字母旋轉遊戲 time limit 1000ms memory limit 65536k total submissions 7053 accepted 2642 description 給定兩個整數m,n,生成乙個m n的矩陣,矩陣中元素取值為a至z的26個字母中的乙個,a在左上角,其餘各數按順時...