码迷,mamicode.com
首页 > 其他好文 > 详细

搜索之“炸弹人”

时间:2015-04-24 09:11:40      阅读:102      评论:0      收藏:0      [点我收藏+]

标签:深搜

先来说说题目意思吧,如图,帮助小人找到一个放炸弹的坐标,使之一颗炸弹炸死最多的敌人。
技术分享
我们用字符G表示敌人,#表示墙, . 表示可以走的路,特别说明下,那种一推就倒的墙,就把它看做路吧。
下面就来搜索来一下吧:

/*
来让我们小小的说明下深搜的要点:
1、解决当前任务是什么。
2、什么时候我该休息。
3、当前任务做完了,下一步怎么做。
怎么样很好理解的吧
*/
#include<stdio.h>
#include<string.h> 

char map[20][20];//存储图
int mark[20][20];//标志图中的位置是否到达过 
int m,n;//m行n列的图
int ex,ey;//需要的出的坐标
int max; 
//位于(x,y)坐标是应该怎么处理,这里的x,y表示的是第x行,第y列 
void DFS(int x,int y){

    /*
    *这个时候该结束了,可以休息了
    *
    *当前位置可不能是图的外部 ,当然走过了耶不用走了 
    */
    if(x>=m || x<1 || y>=n || y<1 || mark[x][y] || map[x][y]==‘G‘ || map[x][y]==‘#‘){
        return ;
    }
    /*
    *当前我的任务是这个,统计我能消灭的敌人
    *
    *从这里向下可以写为一个函数
    */
    int sum=0;
    int tx,ty;
    tx = x,ty=y;
    while(map[tx][ty]!=‘#‘){
        //统计当前位置以上敌人数量 
        if(map[tx][ty]==‘G‘){
            sum++;
        }
        tx++; 
    }
    tx=x;ty=y;
    while(map[tx][ty]!=‘#‘){
        //统计当前位置以下的敌人
        if(map[tx][ty]==‘G‘){
            sum++;
        } 
        tx--;
    }
    tx=x;ty=y;
    while(map[tx][ty]!=‘#‘){
        //统计当前位置左边的敌人 
        if(map[tx][ty]==‘G‘){
            sum++;
        }
        ty--;
    } 
    tx=x;ty=y;
    while(map[tx][ty]!=‘#‘){
        //统计当前位置左边的敌人 
        if(map[tx][ty]==‘G‘){
            sum++;
        }
        ty++;
    }
    /*从这里向上可以写为一个函数*/

    //更新最大值
    if(sum>max){
        max = sum;
        ex = x;
        ey = y;
    } 

    mark[x][y]=1;//这个点走过了,就不要了

    /*
    *当前任务做完了,我可以接下一个任务了
    *下一步可以上下左右的选择一下
    */ 
    DFS(x+1,y); 
    DFS(x-1,y);
    DFS(x,y-1);
    DFS(x,y+1);
    return ;
}
int main(){
    memset(mark,0,sizeof(mark));
    max=0;

    scanf("%d%d",&m,&n);

    for(int i=0;i<m;i++){
        scanf("%s",map[i]);
    }
    DFS(2,3);//假设从2,3出发
    printf("最佳坐标:(%d,%d),可以干掉敌人%d个!",ex,ey,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#
#############
*/

上面的看懂了没呢,倒杯茶,静心想一想。

搜索之“炸弹人”

标签:深搜

原文地址:http://blog.csdn.net/u012437355/article/details/45227645

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!