经测试,我下不过这个程序
但是提交上去显示平局,而程序只有五步左右,也就是说五步交互库就自动判结束了??(还是不能用exit(0)??)
是不是我对判平局的条件理解的有问题?
哪位大佬帮看一看 万分感谢 qwq
#include<bits/stdc++.h>
using namespace std;
bool DEBUG=0;
int a[1005][1005];
int dx[5]={0,0,1,0,1};
int dy[5]={0,0,0,1,1};
void show(){
if(!DEBUG){
return;
}
int minx=2e9,miny=2e9,maxx=0,maxy=0;
for(int i=1;i<=1000;i++){
for(int j=1;j<=1000;j++){
if(a[i][j]!=0){
minx=min(minx,i);
miny=min(miny,j);
maxx=max(maxx,i);
maxy=max(maxy,j);
}
}
}
for(int i=minx;i<=maxx;i++){
for(int j=miny;j<=maxy;j++){
printf("%d ",a[i][j]);
}
printf("\n");
}
}
void move(int x,int y){
cout<<x<<" "<<y<<endl;
a[x][y]=1;
}
void omove(){
int x1,y1,x2,y2;
cin>>x1>>y1>>x2>>y2;
a[x1][y1]=a[x2][y2]=2;
}
void check(){
for(int i=1;i<=999;i++){
for(int j=1;j<=999;j++){
int c1=0,c2=0;
for(int k=1;k<=4;k++){
c1+=(a[i+dx[k]][j+dy[k]]==1);
c2+=(a[i+dx[k]][j+dy[k]]==0);
}
if(c1==2&&c2==2){
for(int k=1;k<=4;k++){
if(a[i+dx[k]][j+dy[k]]==0){
move(i+dx[k],j+dy[k]);
}
}
show();
exit(0);
}
}
}
}
int main(){
move(666,666);
move(666,667);
show();
omove();
show();
check();
move(666,669);
move(666,670);
show();
omove();
show();
check();
if(a[665][667]==2&&a[665][669]==2&&a[667][666]==2&&a[667][670]==2){
move(667,668);
move(666,671);
show();
omove();
show();
check();
move(668,668);
move(666,672);
show();
omove();
show();
check();
}
else if(a[667][667]==2&&a[667][669]==2&&a[665][666]==2&&a[665][670]==2){
move(665,668);
move(666,671);
show();
omove();
show();
check();
move(664,668);
move(666,672);
show();
omove();
show();
check();
}
else if(a[665][667]==2&&a[665][669]==2&&a[667][667]==2&&a[667][669]==2){
move(666,665);
move(666,671);
show();
omove();
show();
check();
}
else if(a[665][666]==2&&a[665][670]==2&&a[667][666]==2&&a[667][670]==2){
move(666,668);
move(665,668);
show();
omove();
show();
check();
}
else{
move(666,668);
if(a[665][666]==2&&a[667][666]==2){
move(666,671);
}
else{
move(666,665);
}
show();
omove();
show();
check();
}
return 0;
}
show()函数是一个及其简陋的可视化