记得加 -std=c++14

#include<bits/stdc++.h>
#include<windows.h>
using namespace std;
#define int long long
bool die[25][25];
int ci[25][25],n,m,cnt,vis[25][25],open;
const int dx[]={-1,0,0,1,1,1,-1,-1};
const int dy[]={0,1,-1,0,1,-1,1,-1};
void print(){
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(vis[i][j]==1){
				cout<<ci[i][j]<<"  |  ";
			}
			else if(vis[i][j]==2){
				cout<<'*'<<"  |  ";
			}
			else cout<<'?'<<"  |  ";
		}
		cout<<"\n";
		for(int i=1;i<=6*n;i++){
			cout<<'-';
		}
		cout<<"\n";
	}
}
void end_print(){
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(die[i][j]){
				cout<<"*"<<"  |  ";
			}
			else{
				cout<<ci[i][j]<<"  |  ";
			}
		}
		cout<<"\n";
		for(int i=1;i<=6*n;i++){
			cout<<'-';
		}
		cout<<"\n";
	}
}
void dfs(int x,int y){
	vis[x][y]=1;
	open++;
	if(ci[x][y]!=0)return ;
	for(int i=0;i<8;i++){
		int xx=x+dx[i];
		int yy=y+dy[i];
		if(vis[xx][yy])continue;
		if(xx<1||xx>n||yy<1||yy>m)continue;
		dfs(xx,yy);
	}
}
signed main(){
	mt19937 myrand(time(0));
	cout<<"欢迎来到扫雷-----";
	cout<<"\n请输入地图的行数(<=15):";
	cin>>n;
	cout<<"\n请输入地图的列数(<=15):";
	cin>>m;
	cout<<"\n请输入地图的雷数:";
	cin>>cnt;
	cout<<'\n';
	memset(die,false,sizeof die);
	for(int i=1;i<=cnt;i++){
		int x,y;
		do{
			x=myrand()%n+1;
			y=myrand()%m+1;
		}while(die[x][y]);
		die[x][y]=true;
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(die[i][j])continue;
			for(int k=0;k<8;k++){
				int xx=i+dx[k];
				int yy=j+dy[k];
				if(xx<1||xx>n||yy<1||yy>m)continue;
				if(die[xx][yy]){
					ci[i][j]++;
				}
			}
		}
	}
	bool win=false,lose=false;
	int x,y,op,lx,ly;
	while(!win&&!lose){
		cout<<"1是插旗子/拆棋子,2是打开\n";
		cin>>op;
		cout<<"再输入两个数表示坐标\n";
		cin>>x>>y;
		if(x<1||x>n||y<1||y>m)continue;
		if(op==1){
			if(vis[x][y]==0)vis[x][y]=2;
			else vis[x][y]=0;
			system("cls");
			print();
			continue;
		}
		if(die[x][y]){
			lose=true;
			lx=x,ly=y;
			break;
		}
		dfs(x,y);
		if(open>=n*m-cnt){
			win=true;
			break;
		}
		system("cls");
		print();
	}
	system("cls");
	if(lose){
		cout<<"你输了,("<<lx<<","<<ly<<")"<<"是雷\n"; 
	}
	else{
		cout<<"你赢了!!\n"; 
	}
	end_print();
}
//ioi ak me