策略有问题还是代码有问题还是交互库的问题
查看原帖
策略有问题还是代码有问题还是交互库的问题
766436
Mr_RedStone楼主2023/12/6 19:21

经测试,我下不过这个程序

但是提交上去显示平局,而程序只有五步左右,也就是说五步交互库就自动判结束了??(还是不能用exit(0)??)

是不是我对判平局的条件理解的有问题?

哪位大佬帮看一看 万分感谢 qwqqwq

#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()函数是一个及其简陋的可视化

2023/12/6 19:21
加载中...