規(guī)則
用放置炸彈的方法來(lái)消滅敵人,,須將畫面上的敵人全部消滅后并找到隱藏在墻里的暗門才能過(guò)關(guān)。
游戲圖片
題目要求
現(xiàn)有一個(gè)特殊關(guān)卡,只有一枚炸彈,但是這枚炸彈威力超強(qiáng)(炸彈的爆炸方向是沿上下左右四個(gè)方向),請(qǐng)問(wèn)放在那里可以消滅最多的敵人
分析
本實(shí)驗(yàn)使用枚舉算法(又叫做窮舉算法)
先將整個(gè)地圖模型化,墻用#表示,這里有兩種墻,可以被炸和不可以被炸,但是現(xiàn)在由于只有一枚炸彈且炸彈不能穿墻,所以都可以看成不可以被炸的。敵人用G表示,空地用 . 表示,炸彈只能放在空地上
模型化的地圖- 需要用一個(gè)二維字符數(shù)組來(lái)存儲(chǔ)這個(gè)地圖,至于將炸彈放置在哪一個(gè)點(diǎn)可以消滅敵人最多,則需要一個(gè)個(gè)來(lái)嘗試,注意,這里說(shuō)的坐標(biāo)(x,y)指的是x行y列
- 如何分別統(tǒng)計(jì)上下左右四個(gè)方向上可以消滅的敵人數(shù)?只要搞清一個(gè)方向,其他的方向都是一樣的。向下統(tǒng)計(jì)為例,向下就是y不變,x每次增加1,直到遇到墻為止
while(a[x][y]!='#') { if(a[x][y] == 'G') sun++; //如果可以消滅一個(gè)敵人就sum++ x++;繼續(xù)向下 }
另外幾個(gè)方向進(jìn)行統(tǒng)計(jì)的坐標(biāo)變化如下:
坐標(biāo)變化- 統(tǒng)計(jì)哪個(gè)空地坐標(biāo)在四個(gè)方向上消滅的敵人最多
注意:此算法沒(méi)有考慮炸彈人是否能到達(dá)該空地
代碼:
#include <stdio.h>
int main(void)
{
int n = 13,m = 13;//n行m列
char a[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#",
"#############"
};
int i,j,sum,map = 0,p,q,x,y;
for(i = 0; i < n; i++)
{
for(j = 0; j < m; j++)
{
//首先判斷這個(gè)點(diǎn)是否是平地,只有平地才能被防止炸彈
if(a[i][j] == '.')
{
//sum用來(lái)計(jì)數(shù)(可以消滅的敵人數(shù)),需初始化為0
sum = 0;
//將當(dāng)前坐標(biāo)i,j復(fù)制到兩個(gè)新變量x,y中,以便向上下左右四個(gè)方向分別統(tǒng)計(jì)可以消滅的敵人數(shù)
//向上統(tǒng)計(jì)
x = i;
y = j;
//判斷是不是墻,不是就繼續(xù)
while(a[x][y]!= '#')
{
if(a[x][y] == 'G')
sum++;
//向上統(tǒng)計(jì)
x--;
}
//向下統(tǒng)計(jì)
x = i;
y = j;
//判斷是不是墻,不是就繼續(xù)
while(a[x][y]!= '#')
{
if(a[x][y] == 'G')
sum++;
//向下統(tǒng)計(jì)
x++;
}
//向左統(tǒng)計(jì)
x = i;
y = j;
//判斷是不是墻,不是就繼續(xù)
while(a[x][y]!= '#')
{
if(a[x][y] == 'G')
sum++;
//向左統(tǒng)計(jì)
y--;
}
//向右統(tǒng)計(jì)
x = i;
y = j;
//判斷是不是墻,不是就繼續(xù)
while(a[x][y]!= '#')
{
if(a[x][y] == 'G')
sum++;
//向右統(tǒng)計(jì)
y++;
}
//更新map的值,并保存坐標(biāo)
if(sum > map)
{
map = sum;
p = i;
q = j;
}
}
}
}
printf("Bomb set(%d,%d),Destroy the enemy at most:%d",p,q,map);
getchar();
return 0;
}
結(jié)果:
Bomb set(9,9),Destroy the enemy at most:8


