昨天老师上课让我们手写,,写了,大概思想都没什么问题,但是后来想到,有的地方写错了。。。那个估计不能run出来。。临场马上写代码的能力还是有点弱。。。
回来把课上写的错的改了一下。。
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define M 1000
int mp[8][8]; //记录整个图
int vis[8]; //记录哪个列已经被放过
int ok;
int ans;
void dfs(int u) //深搜行
{
if(u==8)
{
//ok = 1;
ans++;
for(int i = 0;i < 8;i++)
{
for(int j = 0;j < 8;j++)
printf("%d",mp[i][j]);
printf("\n");
}
printf("------%d\n",ans);
return ;
}
for(int v = 0;v < 8;v++)
{
if(!vis[v])
{
int temp=0;
for(int i = 1;i <= u;i++)
{
if(v-i>=0 && mp[u-i][v-i]) temp = 1; //判断斜线
else if(v+i<8 && mp[u-i][v+i]) temp = 1;
}
if(!temp)
{
vis[v] = 1; //标记
mp[u][v] = 1;
dfs(u+1);
vis[v] = 0; //回溯取消标记
mp[u][v] = 0;
}
}
}
}
int main()
{
//ok = 0;
ans=0;
dfs(0);
printf("%d\n",ans);
return 0;
}