1.c国际象棋语言运行结果出问题
2.c/c++编程题 在国际象棋的棋源棋源棋盘上(N*N),皇后可以走直线也可以走斜线(对角线).一个皇后能吃
c国际象棋语言运行结果出问题
这个间隔是他编译显示的问题,如果你在vc里面编译就不会有这个间隔,码象码下破解软件拿到源码但是棋源棋源易语言微信机器人源码vc里面编译也会有问题,那就是码象码下上升三法选股公式源码棋盘是错位的这里修改需要将
printf(" "); /*输出两个空格*/改为
printf(" "); /*输出3个空格*/
效果如下
c/c++编程题 在国际象棋的棋盘上(N*N),皇后可以走直线也可以走斜线(对角线).一个皇后能吃
#include <iostream>
#include <cstdio>
#define UINT unsigned int
#define ULL unsigned long long
#define MAXN ;
using namespace std;
int N,ans,minstep;
UINT Row,Col;
UINT Lft,Rgt;
inline UINT lowbit(UINT x){
return x&(-x);
}
bool check(){
UINT tR=~Row,tC;
UINT curR,curC;
while(tR){
curR=lowbit(tR);
tR ^= curR;
tC = ~Col;
while(tC){
curC=lowbit(tC);
tC^=curC;
if((Rgt & (curR*curC))!=0 || (Lft & ((1<<(N-1))/curR*curC))!=0)
continue;
return false;
}
}
return true;
}
void dfs(int row,int used,UINT col,UINT dig,UINT adg){
if(used>minstep)
return;
if(row == N){
if(check()){
if(used < minstep){
minstep = used;
ans=0;
}
ans++;
}
return;
}
UINT status=~(col|dig|adg);
UINT binRow=(1<<row);
while(status){
UINT t=status&(-status);
Col^=t;
Row^=binRow;
Lft^=((1<<(N-1))/binRow*t);
Rgt^=(binRow*t);
dfs(row+1,used+1,(t|col),(t|dig)>>1,(t|adg)<<1);
Col^=t;
Row^=binRow;
Lft^=((1<<(N-1))/binRow*t);
Rgt^=(binRow*t);
status^=t;
}
dfs(row+1,used,col,dig>>1,adg<<1);
}
int main(){
while(cin>>N){
UINT col=(1<<N)-1;
col=~col;
ans=0;
minstep=N+1;
Row=Col=col;
Rgt=Lft=0;
dfs(0,0,col,0,0);
cout<<minstep<<' '<<ans<<endl;
}
return 0;
}
2024-11-14 23:08
2024-11-14 23:01
2024-11-14 22:21
2024-11-14 22:15
2024-11-14 22:14
2024-11-14 21:48
2024-11-14 21:37
2024-11-14 21:17