Q版泡泡堂第一关

written by: 东篱下の悠然

游戏玩法说明:输入地图(矩阵)的行和列, 输入角色的起点,分别用空格隔开,回车。输入地图:(地图第一行编号为0,第二行编号为1,列也一样)要求地图上下左右用井号“#”包围代表墙壁,通道为英文句点“.” ,敌人用“G”表示。程序将会返回一个坐标和一个数字,分别代表炸弹放置的位置和可消灭的最大敌人数(炸弹不可以穿透墙壁)
程序为c++:

#include <bits/stdc++.h>

//坐标 
struct node {
	int x;
	int y;
};

//存储地图 
char a[20][25];

//统计最多能干掉的敌人数 
int getnum(int i, int j){
	int sum, x, y;
	sum = 0;//最大消灭敌人数
	
	x = i; y = j;//复制坐标,方便统计消灭敌人最大数
	//向上统计 
	while(a[x][y] != '#'){//不是墙 
		if(a[x][y] == 'G') sum ++;
		x--;
	}
	x = i; y = j;
	//向下统计 
	while(a[x][y] != '#'){//不是墙 
		if(a[x][y] == 'G') sum ++;
		x++;
	}
	x = i; y = j;
	//向左统计 
	while(a[x][y] != '#'){//不是墙 
		if(a[x][y] == 'G') sum ++;
		y--;
	}
	x = i; y = j;
	//向右统计 
	while(a[x][y] != '#'){//不是墙 
		if(a[x][y] == 'G') sum ++;
		y++;
	}
	return sum;
}

/*
 * breadth first search
 */
int main(){
	
	printf("Q版泡泡堂第一关\n\n");
	
	struct node queue[20 * 20 + 1];//地图不超过20 * 20 
	int book[20][20] = {0};
	
	int j, k, sum, max = 0, mx, my, tx, ty;
//准备行走方向
	int next [4][2] = {{0,1},{1,0},{0,-1},{-1,0}};
	
//输入地图 
	int m, n, startx, starty;
	scanf("%d%d%d%d",&n, &m, &startx, &starty);
	for(int i = 0; i < n; i++)
	scanf("%s", a[i]);
	
//角色起点入队 
	int head = 1, tail = 1;
	queue[tail].x = startx; queue[tail].y = starty;
	tail ++;
	book[startx][starty] = 1;//marked
	
	max = getnum(startx, starty);
	
	mx = startx; my = starty;
	
	while(head < tail){  //list不空: 
	
		//每次行走一步 
		for(int k = 0; k <= 3; k++){
			int tx = queue[head].x + next[k][0];//尝试行走 
			int ty = queue[head].y + next[k][1];
			
			if(tx < 0 || tx > n - 1 || ty < 0 || ty > m - 1) //撞墙 
			continue; 
			
			if(a[tx][ty] == '.' && book[tx][ty] == 0){//行走 
				book[tx][ty] = 1;
				queue[tail].x = tx; 
				queue[tail].y = ty;
				tail ++;
				
				sum = getnum(tx, ty);//统计新坐标可消灭的敌人数
				
				if(sum > max){ //更新max 
					max = sum;
					mx = tx;
					my = ty;
				} 
			} 
		}
		head ++; //更新队首 
	}
	printf("(%d, %d)  %d", mx, my, max);
	
	getchar(); getchar();
	return 0; 
}


附一个地图:运行程序,可用该地图测试。

/*
#############
#GG.GGG#GGG.#
###.#G#G#G#G#
#.......#..G#
#G#.###.#G#G#
#GG.GGG.#.GG#
#G#.#G#.#.#.#
##G...G.....#
#G#.#G###.#G#
#...G#GGG.GG#
#G#.#G#G#.#G#
#GG.GGG#G.GG#
#############
*/
发布了9 篇原创文章 · 获赞 3 · 访问量 873

猜你喜欢

转载自blog.csdn.net/wenya13/article/details/104385635