作业是完成带有回溯的8皇后二维阵列程序。
#include <iostream>
using namespace std;
int main() {
int b[8][8] = { 0 };
int r, c, i;
int count = 1;
b[0][0] = 1;
c = 0;
nextColumn:
c++;
if (c == 8)
goto print;
r =- 1;
nextRow:
r++;
if (r == 8)
goto back;
for (i = 0; i < c; i++) {
if (b[r][i] == 1)
goto nextRow;
}
for (i = 0; (r - i) >= 0 && (c - i) >= 0; i++) {
if (b[r - i][c - i] == 1)
goto nextRow;
}
for (i = 0; (r + i) < 8 && (c - i) >= 0; i++) {
if (b[r + i][c - i] == 1)
goto nextRow;
}
b[r][c] = 1;
goto nextColumn;
c--;
if (c == -1)
return 0;
r = 0;
while (b[r][c] != 1)
r++;
b[r][c] = 0;
goto nextRow;
cout << endl;
cout << "Result No." << count << endl;
cout << endl;
for (r = 0; r < 8; r++){
for (int c = 0; c < 8; c++){
cout << b [r][c];
}
cout << endl;
}
count++;
goto back;
}
答案 0 :(得分:6)
嗯,不。
true
的函数,如果没有,则返回false
。goto
,通常是ConsideredHarmful。你正在使用它很多,它总是被认为是有害的。答案 1 :(得分:3)
如果您关心您的程序是否正确,请确保它首先是可读的。
所以正确地缩进程序,声明(和init)变量使用它们,并停止使用goto
语句。如果你想从for循环中提前拯救,那就是break
。 (或者更好的是,在单独的函数中编写循环代码并使用早期返回!)。