这是题目要求
输入样例1
5 5 1 1
0 0
4 4
输出样例1
-1 1 0 0 0
1 1 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
You win
输入样例2
4 5 1 2
1 2
3 0
1 2
输出样例2
0 1 -1 1 0
0 1 -1 1 0
0 1 1 1 0
0 0 0 0 0
You lose
输入样例3
4 5 1 2
1 2
3 0
0 2
输出样例3
0 1 -1 1 0
0 1 -1 1 0
0 1 1 1 0
0 0 0 0 0
0 1 1 1 0
0 1 -1 1 0
0 1 1 1 0
0 0 0 0 0
You win
下面是我的代码,我用两个数组一个存储雷的元素信息,另一个存储玩家界面信息
为什么递归不能实现,不能输出结果,实在看不出哪有问题
#include<stdio.h>
int n,m,k,l;
int data[20][20]; //数据数组
int play[20][20]; //玩家界面数组
int count=0;
void Init();
void disp();
void dispdata();
void setboom(int a,int b);
void setnumber();
//初始化玩家界面
void Init()
{
for (int i = 0; i < 20; i++)
{
for (int j = 0; j < 20; j++)
{
play[i][j] = -1;
}
}
}
//打印玩家界面
void disp()
{
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
printf("%d ",play[i][j]);
}
printf("\n");
}
}
//打印后台数据
void dispdata(){
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
printf("%d ",data[i][j]);
}
printf("\n");
}
}
//设置炸弹
void setboom(int a,int b)
{
data[a+1][b+1]=-1; //data数组打印出来的是从下标1开始的
}
//将后台数据与游戏界面交互
void swap(int x,int y)
{
if(data[x+1][y+1]==0){
play[x][y]=data[x+1][y+1];
if(data[x+1-1][y+1-1]==0){
swap((x+1-1),(y+1-1));
count++;
}
if(data[x+1-1][y+1]==0){
swap((x+1-1),(y+1));
count++;
}
if(data[x+1-1][y+1+1]==0){
swap((x+1-1),(y+1+1));
count++;
}
if(data[x+1][y+1-1]==0){
swap((x+1),(y+1-1));
count++;
}
if(data[x+1][y+1+1]==0){
swap((x+1),(y+1+1));
count++;
}
if(data[x+1+1][y+1-1]==0){
swap((x+1+1),(y+1-1));
count++;
}
if(data[x+1+1][y+1]==0){
swap((x+1+1),(y+1));
count++;
}
if(data[x+1+1][y+1+1]==0){
swap((x+1+1),(y+1+1));
count++;
}
}else{
play[x][y]=data[x+1][y+1];
count++;
}
}
//判断玩家输入是否为雷位
int panduan(int x,int y)
{
if(data[x+1][y+1]==-1)
{
return -1;
}else{
return 1;
}
}
//设置后台元素数据
void setnumber()
{
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(data[i][j]==0)
{
if(data[i-1][j-1]==-1)
data[i][j]++;
if(data[i-1][j]==-1)
data[i][j]++;
if(data[i-1][j+1]==-1)
data[i][j]++;
if(data[i][j-1]==-1)
data[i][j]++;
if(data[i][j+1]==-1)
data[i][j]++;
if(data[i+1][j-1]==-1)
data[i][j]++;
if(data[i+1][j]==-1)
data[i][j]++;
if(data[i+1][j+1]==-1)
data[i][j]++;
}
}
}
}
int main()
{
Init();
scanf("%d %d %d %d",&n,&m,&k,&l); //输入数据
//将炸弹保存进后台数组
for(int i=0;i<k;i++){
int a=0,b=0;
scanf("%d %d",&a,&b);
setboom(a,b);
}
//设置所有元素数值
setnumber();
//玩家操作
int x,y; //玩家操作的坐标
int flag=0; //设置一个标志位
for(int i=0;i<l;i++){
scanf("%d %d",&x,&y);
if((flag=panduan(x,y)==-1)){
dispdata();
printf("You lose");
}else{
swap(x,y);
disp();
if(count==n*m-k){
printf("You win");
}
}
}
return 0;
}
打个断点,逐步看看
已近解决..
我也是醉了,程序开始任何提示都没有,用户怎么输入,输入什么,也没有一个说明,打开就是一个光标在闪,一脸懵逼
– 中华鲟3670 2年前@中华鲟3670: 看题目... 题目这样的呀
– 壹怪 2年前