搜索

来源:互联网 发布:淘宝卖家怎么升级快 编辑:程序博客网 时间:2024/05/16 09:54

深度优先搜索

虽然是很简单的一道题目,但是通过自己码出来还是很有成就感的~


POJ 1979

适合入门



#include <iostream>

#include <vector>

#include <map>

#include <queue>

#include <stdio.h>

#include <string.h>

#include <utility>

#define MAX 25

using namespacestd;


typedef pair<int,int> P;

char maze[MAX][MAX];

int W,H;

int sx,sy;

int step=-1;


int dx[4]={1,0,-1,0},dy[4]={0,1,0,-1};

//由于题目限制只能上下左右移动,所以不能直接用两个for循环套用


void dfs(int x,int y)

{

    step++;

    maze[x][y]='#';

    for(int i=0;i<4;i++)

    {

        for(int j=0;j<4;j++)

        {

            int nx=x+dx[i];

            int ny=y+dy[i];

            if(0<=nx && nx<H &&0<=ny && ny<W &&maze[nx][ny]!='#')

            {

                dfs(nx,ny);

            }

        }

    }

}



int main()

{

    while(cin>>W>>H)

    {

        memset(maze,0,sizeof(maze));

        if(W==0&&H==0)

            return0;

        step=0;

        for(int i=0;i<H;i++)

        {

            for(int j=0;j<W;j++)

            {

                cin>>maze[i][j];

                if(maze[i][j]=='@')

                {

                    sx=i;sy=j;

                }

            }

            

        }

        dfs(sx,sy);

        cout<<step<<endl;

    }

    return0;

}




0 0
原创粉丝点击