​经典算法无需注解​

八皇后问题

#include<iostream>
#include<cmath>
#include<stdio.h>
using namespace std;
int room[9][9],lie[9],sum = 0; //data
void fun(int t) //t hang find lie
{
if(t == 9)
{
int SUM = 0;
for(int i =1;i < 9;i++)
SUM += room[i][lie[i]];
//cout << "************" << endl;
//cout << "SUM" << SUM << " " << "sum " << sum << endl;
//cout << "************" << endl;
if(SUM > sum)
sum = SUM;
return ;
}
int i;
for(i = 1;i <= 8;i++)
{
int j;
for(j = 1;j < t;j++)
{
if(i == lie[j]||abs(lie[j] - i) == abs(j - t))
break;
}
if(t == j)
{
lie[t] = i;
fun(t+1);
}
}

}
int main()
{
freopen("input.txt","r",stdin);
for(int i = 1;i < 9;i++)
for(int j = 1;j < 9;j++)
cin >> room[i][j];
fun(1);
cout << sum << endl;
}

皇后问题

/*
递归函数NQueen从第0个摆到第N个
全局变量数组存储皇后的列
递归函数满足形参到N则输出
每行从第一列开始找、与前面摆好的以此比较、如果行相等或者行列差成正比不需要在比较其他往后仰直接找下一列。
如果是因为全部符合退出 该i就是要存储的列
继续找下一个皇后
*/

#include<iostream>
#include<cmath>
using namespace std;
int N;
int queenPos[100]; //用来存储N皇后的位置
void NQueen (int k)
{
int i ;
if(k==N) //N个皇后已经摆好
{
for(i = 0;i < N;i++)
{
cout << queenPos[i] + 1 << "";
}
cout << endl;
return ;
}
for( i = 0;i < N; i++) //逐步尝试第k个皇后的位置
{
int j; //测试是否与已经摆好的冲突
for(j = 0;j < k;j++)
{
if(queenPos[j] == i||abs(queenPos[j]-i)==abs(k-j))
{
break;
}
}
if( j == k) //当前选的位置i不变
{
queenPos[k] = i; //将第k个 皇后摆在i的位置
NQueen(k+1);
}
}
}

int main()
{
cin >> N;
NQueen(0);
return 0;
}