上午
照旧听英语四级听力,背单词。
然后看了两章《大话数据结构》。
还写了一下八皇后,没写出。
晚上
继续写八皇后,终于已经能够得出6*6的答案了,还没搞我这为什么数高上去答案就不对了。明明6的都可以得出来了,已经很接近了。大概,还是回溯的地方出了问题。
#include <iostream>
#include <cmath>
#include <memory.h>
#include <algorithm>
using namespace std;
int mark[20][20]={0},ans[20][20]={0},n,k;
int path[8][2]={{1,1},{1,-1},{-1,-1},{0,1},{-1,1},{0,-1},{1,0},{-1,0}},m,l;
void dfs(int c,int cnt)
{
if(cnt==n)
{
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(mark[i][j]==22)
ans[m][l++]=j;
m++;
l=0;
return;
}
for(int i=1;i<=n;i++)
{
if(mark[c][i]==0)
{
mark[c][i]=22;
for(int j=0;j<8;j++)
{
int x=c+path[j][0];
int y=i+path[j][1];
while(x>=1&&x<=n&&y>=1&&y<=n)
{
if(mark[x][y]==0)
mark[x][y]=c;
x=x+path[j][0];
y=y+path[j][1];
}
}
}
else continue;
dfs(c+1,cnt+1);
mark[c][i]=0;
for(int j=0;j<8;j++)
{
int x=c+path[j][0];
int y=i+path[j][1];
while(x>=1&&x<=n&&y>=1&&y<=n)
{
if(mark[x][y]==c)
mark[x][y]=0;
x=x+path[j][0];
y=y+path[j][1];
}
}
}
}
int main()
{
cin >>n;
dfs(1,0);
for(int i=0;i<3;i++)
{
for(int j=0;j<n;j++)
cout <<ans[i][j]<<" ";
cout <<endl;
}
cout <<m;
cout <<endl;
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
cout <<ans[i][j]<<" ";
cout <<endl;
}
}
明天接着写。