炸弹人深搜枚举

问题
大家小时候玩的那个炸弹人游戏
你放置炸弹,这只有一枚,但是他威力超强,请问炸弹放在哪可以消灭最多的敌人

#是墙  .是空地  G是敌人
第一行输入 场地范围 行 列 
/*dfs版本*/
 
#include <stdio.h>

char a[20][21];       //地图           
int book[20][21], max, mx, my, n, m;
 
//枚举炸弹可以消灭多少敌人 
int getnum (int i, int j);
//深搜查找炸弹人能到达的坐标 
void dfs(int x, int y);

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; 
}
 

void dfs (int x, int y) {
	int next[4][2] = { {0, 1},	   //向右 
					   {1, 0},     //向下 
					   {0, -1},	   //向左 
					   {-1, 0}    //向上 
	};                              //(x 坐标为行变换,y 坐标为列变换) 
	int k, sum, tx, ty;
	sum = getnum(x, y);   //当前点可消灭敌人个数 
	
	if(sum > max){
		max = sum;
		mx = x;
		my = y;
	} 
	
	//枚举四个方向;   
	for (k = 0; k <= 3; k++) {       
		//向下一个结点
		tx = x + next[k][0];
		ty = 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;         //标记表示已走过此点 
			dfs(tx, ty);              //下一个点 
		}
				                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
		
	 
	}
	return ;
}

int main(){
	int i, startx, starty;
	
	//n行m列
	scanf("%d %d %d %d", &n, &m, &startx, &starty);
	
	for(i = 0; i <= n-1; i++) {
		scanf("%s",a[i]);
	} 
	
	//小孩所占位置出发尝试 
    book[startx][starty] = 1;
	max = getnum(startx, starty);
	mx = startx;
	my = starty; 
	dfs(startx, starty);
	
	printf("炸弹放在(%d, %d),最多可消灭%d个敌人\n",mx, my, max);
	
	return 0;
}

发布了26 篇原创文章 · 获赞 4 · 访问量 2395

猜你喜欢

转载自blog.csdn.net/weixin_43257196/article/details/88959965