自己瞎搞了个五子棋,目前是无法判断是否赢
  • 板块学术版
  • 楼主fried_chicken
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/11/24 23:36
  • 上次更新2023/11/25 10:10:24
查看原帖
自己瞎搞了个五子棋,目前是无法判断是否赢
673342
fried_chicken楼主2023/11/24 23:36

rt 拿爆搜写的,检查了半天没看出来

#include<bits/stdc++.h>
using namespace std;
#define file(filename) freopen(filename".in","r",stdin),freopen(filename".out","w",stdout)
#define endl "\n"
#define INF 0x3f3f3f3f
#define ll long long
#define ull unsigned long long
#define mem(a,num) memset(a,num,sizeof(a))
#define keep(n) fixed<<setprecision(n)
#define lowbit(x) x&(-x)
#define pch putchar
#define LF putchar('\n')
#define SP putchar(' ')
template <typename T>void read(T& x) {x = 0; char ch = getchar();ll f = 1;while (!isdigit(ch)) {if (ch == '-')f *= -1;ch = getchar();} while (isdigit(ch)) {x = x * 10 + ch - 48;ch = getchar();}x *= f;}template <typename T, typename... Args>void read(T& first, Args&... args) {read(first);read(args...);}template <typename T>void write(T arg) {T x = arg;if (x < 0) {putchar('-');x = -x;}if (x > 9) { write(x / 10);} putchar(x % 10 + '0');}template <typename T, typename... Ts>void write(T arg, Ts... args) {write(arg); if (sizeof...(args) != 0) { putchar(' ');write(args...);}}

const ll N=100001;
int n,m,sum,ans;
int a[N];
bool flag=false;
int vis[1001][1001];
//0:无
//1:黑
//-1:白
void print() { //输出棋盘
	for(int i=1; i<=19; i++) {
		for(int j=1; j<=19; j++) {
			if(vis[i][j]==0) pch('-');
			if(vis[i][j]==1) pch('.');
			if(vis[i][j]==-1) pch('O');
		}
		LF;
	}
}
int dx[9]= {-1,-1,-1,0,0,1,1,1};
int dy[9]= {-1,0,1,-1,1,-1,0,1};
void dfs(int x,int y,int step) { //判断是否赢
	if(step==5) {
		flag=true;
		return;
	}
	for(int i=0; i<8; i++) {
		int xx=x+dx[i];
		int yy=y+dy[i];
		if(xx>=0&&xx<=19&&yy>=0&&yy<=19&&vis[x][y]==vis[xx][yy]&&vis[xx][yy]){
			dfs(xx,yy,step+1);
		}else {
			flag=false;
		}
	}
}

int main() {
	//file("");
	//ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
	int mod=1;
	while(1) {
		print();
		int x,y;
		cout<<"pos:";
		read(x,y);
		if(vis[x][y]){
			cout<<"下过了,重新输";
			read(x,y);
		}
		vis[x][y]=mod;
		mod=-mod;
		dfs(x,y,1);
		if(flag){
			cout<<"you win.";
			break;
		}else system("cls");
	}
	return 0;
}
2023/11/24 23:36
加载中...