cczzyyyy @ 2023-03-16 19:06:04
#include<iostream>
#include<queue>
using namespace std;
int tmp[100];
int n;
int tmp1;
int tmp2;
int otp = 3;
int cnt = 0;
struct sj
{
int rw;
int ret[100];
};
queue<sj> que;
void canbeput(int result[], int row)//目前要排第row行的棋子
{
for (int i = 1; i <= n; ++i)
{
tmp[i] = 1;
}
for (int i = 1; i < row; ++i)
{
tmp[result[i]] = 0;
tmp1 = result[i];
tmp2 = result[i];
for (int j = i; j < row; ++j)
{
tmp1++;
tmp2--;
}
if (tmp1 <= n) tmp[tmp1] = 0;
if (tmp2 >= 1) tmp[tmp2] = 0;
}
//tmp中1的位置即为可以放棋子的位置
}
void bfs()
{
for (int i = 1; i <= n; ++i)
{
sj tmp;
tmp.ret[1] = i;
tmp.rw = 1;
que.push(tmp);
}
while (!que.empty())
{
sj noww;
noww = que.front();
que.pop();
if (noww.rw == n)
{
otp--;
cnt++;
if (otp >= 0)
{
for (int i = 1; i <= n; ++i)
{
cout << noww.ret[i] << " ";
}
cout << endl;
}
continue;
}
canbeput(noww.ret, noww.rw+1);
for (int i = 1; i <= n; ++i)
{
if (tmp[i] == 1)
{
sj neww;
neww = noww;
neww.rw++;
neww.ret[neww.rw] = i;
que.push(neww);
}
}
}
cout << cnt << endl;
}
int main()
{
cin >> n;
bfs();
return 0;
}
by _Adolf_Hitler_ @ 2023-03-16 19:41:14
首先,先康康介个好好瞅瞅,康康犯了啥忌讳
BFS=BDFS=百度,违反Part2第二条中第三小条。
其次,这道题还是DFS清晰。
#include <bits/stdc++.h>
using namespace std;
int heng[20],jia[50],jian[50],put[20],x,ans;
int n,flag=1;
void print()
{
flag++;
for (int i=1; i<=n; i++)
cout<<put[i]<<" ";
cout<<endl;
return;
}
void dfs(int x)
{
for (int i=1; i<=n; i++)
if (heng[i]==0 && jia[i+x]==0 && jian[i-x+10]==0)
{
put[x]=i;
heng[i]=1;
jia[i+x]=1;
jian[i-x+10]=1;
if (x==n)
{
ans++;
if(flag<=3)
print();
}
else
dfs(x+1);
heng[i]=0;
jia[i+x]=0;
jian[i-x+10]=0;
}
return;
}
int main()
{
cin>>n;
dfs(1);
cout<<ans;
return 0;
}
假如说一定要用#%&^$&,那么我不会,但我还是能教你,那么请你康康
by fengziyi @ 2023-03-16 20:06:11
为什么会有人认为 BFS = BDFS 啊
by cczzyyyy @ 2023-03-16 20:32:17
@fengziyi BDFS是什么意思,是让我去百度吗?
by fengziyi @ 2023-03-16 21:08:05
@cczzyyyy 这道题的做法是 DFS,使用 BFS 会超时。
我的楼上可能表述不清,或是理解错了社区规定,lz 的提问做法没有任何问题。
我的建议除非学习新算法,否则少用 baidu。