zoukankan      html  css  js  c++  java
  • HDU1312_Red and Black_广搜

    题目大意: 一个地图里面有三种元素,分别为"@",".","#",其中@为人的起始位置,"#"可以想象为墙,然后.为可以走的空地,求人可以走的最大点数。 解题思路: 好吧,搜索入门题,直接广度搜索,标志入队的次数。入队的次数即为行走的步数。 代码:
    #include
    #include
    const int MAX=25;
    using namespace std;
    typedef struct node
    {
    	int x,y;
    	int step;
    }N;
    int c,r;
    bool visited[MAX][MAX];
    char map[MAX][MAX];
    int dir[4][2]={{-1,0},{0,1},{1,0},{0,-1}};//上,右,下,左
    int step;
    void init()
    {
    	memset(visited,false,sizeof(visited));
    	step=0;
    }
    int BFS(int sx,int sy)
    {
    	queue Q;
    	N pre,cur;
    	pre.x=sx;
    	pre.y=sy;
    	pre.step=1;
    	visited[pre.x][pre.y]=true;
    	Q.push(pre);
    	while(!Q.empty())
    	{
    		pre=Q.front();
    		Q.pop();
    		step++;
    		for(int i=0;i<4;i++)
    		{
    			cur=pre;
    			cur.x=pre.x+dir[i][0];
    			cur.y=pre.y+dir[i][1];
    			if(cur.x>=1 && cur.x<=r && cur.y>=1 && cur.y<=c 
    				&& visited[cur.x][cur.y]==false && map[cur.x][cur.y]=='.')
    			{
    				visited[cur.x][cur.y]=true;
    				cur.step++;
    				Q.push(cur);
    			}
    		}
    
    	}
    	return step;
    }
    int main(void)
    {
    	while(scanf("%d%d",&c,&r),r||c)
    	{
    		int sx,sy;
    		for(int i=1;i<=r;i++)
    		{
    			scanf("%s",map[i]+1);
    			for(int j=1;j<=c;j++)
    			{
    				if(map[i][j]=='@')
    				{
    					sx=i;
    					sy=j;
    				}
    			}
    		}
    		init();
    		int ans=BFS(sx,sy);
    		cout<
  • 相关阅读:
    2017.5.5上午学习内容
    2017.5.4下午学习内容
    2017.5.4上午学习内容
    2017.5.3上午学习内容
    2017.4.28下午学习内容
    2017.4.28上午学习内容
    scrapy项目的代码书写流程
    pycharm的远程连接
    mongodb的安装---linux篇
    mongo的安装和使用---windows篇
  • 原文地址:https://www.cnblogs.com/cchun/p/2520203.html
Copyright © 2011-2022 走看看