欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

枚举地图位置 啊哈,算法上

程序员文章站 2022-06-02 21:26:06
...

题目:给出一个20*20以内的地图,里面会有墙,敌人,平地,要求是找到最合适的放炸弹的位置,并且能够杀死对应行列的敌人,有墙壁的话就会截止

#include <stdio.h>
int main()
{
	char a[20][21];  //定义地图的长度不会超过20*20的
	int n,m,i,j,sum,max=0,p,q,x,y;
	scanf("%d%d",&n,&m);   //n - 行数  m-列数
	
	//开始读入n行字符地图 
	for(i=0;i<n;i++)
		scanf("%s",a[i]);
	
	//进行遍历地图 
	for(i=0;i<n;i++)
		for(j=0;j<m;j++)
		{
			//1.1 首先判断这个点是不是平地
			if(a[i][j] == '.')
			{
		    	//1.2 是的话...	
				 //2.1 进行不停上下左右遍历
				sum=0;
			 	 //2.2 设置x,y作为i,j不停往一个位置的遍历 
				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++; 
				}
				
			//1.3 是的话进行查找每个点能够击杀的最多人次sum,并且保存i,j的坐标 用p和q来保存 	
				if(sum>max){
					max = sum;
					p = i,q = j;
				}
						
			}//if 
	
		}//for 
	printf("找到能够消灭最大点的位置(%d,%d),能够消灭%d人",p,q,max);
	return 0;
}

给出实例:

13 13
#############
#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#
#############

运行结果
枚举地图位置 啊哈,算法上

相关标签: 枚举