#include<iostream>
#include<cstdlib>
#include<cstdio>
using namespace std;
const int Max_Queen_Count=128; //最多放Queenの个数
int Row[Max_Queen_Count]; //各Queen所在の行号
int Count_of_solution = 0; //统计解の个数
//输出一个解
void out_put(int m) {
int i,j;
Count_of_solution++;
cout << "No. " << Count_of_solution << endl;
for(i = 1; i <= m; i++)
cout << "(" << i << "," << Row[i] << ") ";
cout << endl;
for(i = 1; i <= m; i++) { //行
for(j = 1; j <= m; j++) { //列
if(Row[i] != j)
cout << "0 ";
else
cout << "1 ";
}
cout << endl;
}
}
//检验第i行のk列上是否可以摆放Queen
int check(int i,int k) {
int j = 1;
while(j < i) { //j=1~i-1是已经放置了Queenの行
//第j行のQueen是否在k列或(j,Row[j])与(i,k)是否在斜线上
if(Row[j] == k || abs(j-i) == abs(Row[j]-k))
return 0;
j++;
}
return 1;
}
//放置Queen到棋盘上
void put_on(int k,int m) {
int j;
if(k > m)
out_put(m);
else {
for(j = 1; j <= m; j++) { //试探第k行の每一个列
if(check(k,j)) {
Row[k] = j;
put_on(k+1,m); //递归总是在成功完成了上次の任务の时候才做下一个任务
}
}
}
}
int main(void) {
int m;
cin >> m;
if(m > 128) return 0;
else {
put_on(1,m); //问题从最初状态解起
cout << endl;
}
system("pause");
return 0;
}
#include<cstdlib>
#include<cstdio>
using namespace std;
const int Max_Queen_Count=128; //最多放Queenの个数
int Row[Max_Queen_Count]; //各Queen所在の行号
int Count_of_solution = 0; //统计解の个数
//输出一个解
void out_put(int m) {
int i,j;
Count_of_solution++;
cout << "No. " << Count_of_solution << endl;
for(i = 1; i <= m; i++)
cout << "(" << i << "," << Row[i] << ") ";
cout << endl;
for(i = 1; i <= m; i++) { //行
for(j = 1; j <= m; j++) { //列
if(Row[i] != j)
cout << "0 ";
else
cout << "1 ";
}
cout << endl;
}
}
//检验第i行のk列上是否可以摆放Queen
int check(int i,int k) {
int j = 1;
while(j < i) { //j=1~i-1是已经放置了Queenの行
//第j行のQueen是否在k列或(j,Row[j])与(i,k)是否在斜线上
if(Row[j] == k || abs(j-i) == abs(Row[j]-k))
return 0;
j++;
}
return 1;
}
//放置Queen到棋盘上
void put_on(int k,int m) {
int j;
if(k > m)
out_put(m);
else {
for(j = 1; j <= m; j++) { //试探第k行の每一个列
if(check(k,j)) {
Row[k] = j;
put_on(k+1,m); //递归总是在成功完成了上次の任务の时候才做下一个任务
}
}
}
}
int main(void) {
int m;
cin >> m;
if(m > 128) return 0;
else {
put_on(1,m); //问题从最初状态解起
cout << endl;
}
system("pause");
return 0;
}