題意:如圖所示,一共有8個1,8個2和8個3,如何以最少的移動來使得中間8個格仔都為同乙個數。
思路:狀態空間搜尋問題。
用ida*演算法的話會比較快,而且**比較簡潔。
ida*的關鍵就是要尋找乙個估價函式h(),在這道題目中,每次移動最多隻會使乙個格仔的數字正確,所以當maxd-d
1 #include2 #include3 #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在左上角,其餘各數按順時...