枚舉地圖位置 啊哈,算法上

題目:給出一個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#
#############

運行結果
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章