国际象棋的尝试 - 回溯问题
你会得到一个10X10的棋盘,骑士坐在坐标上(I,J)。你必须在棋盘上找到骑士可以正好N次移动的棋盘数量。
输入:
输入将由三个空格分隔的整数I,J,N组成。 N小于10。
输出:
打印一个整数,表示骑士可以完全N移动的棋盘上的棋盘数。
我的解决方案:
#include <iostream>
using namespace std;
#define S 10
bool move_possible(int board[S][S], int x, int y,int i,int j) {
if (((x - 2 == i || x + 2 == i) && (y - 1 == j || y + 1 == j)) ||
((x - 1 == i || x + 1 == i) && (y - 2 == j || y + 2 == j)) )
return true;
return false;
}
bool Knight_moves(int board[S][S], int x, int y, int n, int &b) {
if (n > 0) {
for (int i = 0; i < S; i++) {
for (int j = 0; j < S; j++) {
if (!move_possible(board, x, y, i, j)) continue;
board[i][j]++;
if (Knight_moves(board, i, j, n - 1, b)) return true;
}
}
}
return false;
}
int main() {
int board[S][S];
for (int i = 0; i<S; i++) {
for (int j = 0; j<S; j++) {
board[i][j] = 0;
}
}
int x, y, n, b;
b = 0;
cin >> x >> y >> n;
Knight_moves(board, x - 1, y - 1, n, b);
int moves = 0;
for (int i = 0; i<S; i++) {
for (int j = 0; j<S; j++) {
moves += board[i][j];
}
}
cout << moves;
cin.get();
cin.get();
return 0;
}
此解决方案为某些输入提供了正确的输出,例如:
输入:1 1 1,输出:2
输入:3 3 1,输出:8
输入:3 3 2,输出:50
但是解决方案为某些输入提供了错误的输出,例如:
输入:4 7 6,我的输出:128382,正确输出:50
输入:3 8 5,我的输出:14364,正确输出:50
答案 0 :(得分:0)
这是您可以尝试的一种算法。
首先,创建10x10数组并将每个元素设置为-1
。这标志着广场没有受到攻击。
接下来,获取输入并使用0
标记起始位置。
现在,用1
:
. 1 . 1 . . . . . . 1 . . . 1 . . . . . . . X . . . . . . . 1 . . . 1 . . . . . . 1 . 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
(我已将-1
替换为.
,并以X
开头以明确说明。
在这里,I = 3, J = 3, and N = 1
。所以只需将N
(其中有8个)加起来。
对于N > 1
,请重复。每次迭代,检查板上的每个方块。如果它在上一次迭代中被标记,则标记它正在攻击的每个方格。
示例:3 3 2
. . 2 . . . 2 . . . . 2 . 2 . 2 . . . . 2 . 2 . 2 . 2 . . . . 2 . 2 . 2 . . . . . . 2 . . . 2 . . . . 2 . 2 . 2 . . . . 2 . 2 . 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
攻击的每个方格现在都标有2
。其中有20个。重复。
3 3 3
:
. 3 . 3 . 3 . 3 . . 3 . 3 . 3 . 3 . 3 . . 3 . 3 . 3 . 3 . . 3 . 3 . 3 . 3 . 3 . . 3 . 3 . 3 . 3 . . 3 . 3 . 3 . 3 . 3 . . 3 . 3 . 3 . 3 . . 3 . 3 . 3 . 3 . . . . 3 . 3 . 3 . . . . . . . . . . . . . .
2
攻击的每个空间现在都标有3
。
答案 1 :(得分:0)
我的解决方案:
const firebaseConfig = {
apiKey: 'Your Api key ',
authDomain: 'your ap id .firebaseapp.com',
databaseURL: 'https://auth-78930.firebaseio.com',
projectId: 'xxxxx',
storageBucket: 'xxxxxxx',
messagingSenderId: 'xxxxxx',
appId: '1:674783690996:web:7dde6f4aa97cd79a7c9ea1',
measurementId: 'G-CWBS2XMR3F',
};
// Initialize Firebase
try {
firebase.initializeApp(firebaseConfig);
} catch (e) {
console.log(e);
// firebase.analytics();
}