任务设置如下:你需要在一个棋场上放置8个皇后,这样它们就不会受到对方的攻击。
我在 C++ 中实现了这个任务,如下所示:
#include <iostream>
using namespace std;
int main() {
setlocale(LC_ALL, "ru");
int q[8], c, i;
int count = 1;
q[0] = 0;
c = 0;
NC:
c++;
if (c == 8) goto print;
q[c] = -1;
NR:
q[c]++;
if (q[c] == 8) goto back;
for (i = 0; i < c; i++) {
if ((q[i] == q[c]) || ((c - i) == abs(q[c] - q[i]))) goto NR;
}
goto NC;
back:
c--;
if (c == -1) return 0;
goto NR;
print:
cout << "---------------------------------";
cout << endl;
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
if (j == q[i]) {
cout << "| Ф ";
}
else {
cout << "| ";
}
}
cout << "|";
cout << endl;
cout << "---------------------------------";
cout << endl;
}
system("pause");
return 0;
}
告诉我如何修复我的代码以便我不使用goto?我将不胜感激。
哦,重写别人的代码是多么的难……
所以,重做纯粹是愚蠢的——你可以这样做:
但这是一个马马虎虎的改变……最好立即编写 for 循环或递归。
PS顺便说一句,问题是如此之小,以至于即使是蛮力也可以......