HDOJ 1312 Red and Black

来源:互联网 发布:最快的股票行情软件 编辑:程序博客网 时间:2024/06/03 04:08
一个人在@点,他只能走.不能走#,问他在地图上最多能走多少步,
DFS水题,弱爆了的我还是写了很久,太年轻,还是要多联系,


Sample Input
6 9
....#.
.....#
......
......
......
......
......
#@...#
.#..#.
11 9
.#.........
.#.#######.
.#.#.....#.
.#.#.###.#.
.#.#..@#.#.
.#.#####.#.
.#.......#.
.#########.
...........
11 6
..#..#..#..
..#..#..#..
..#..#..###
..#..#..#@.
..#..#..#..
..#..#..#..
7 7
..#.#..
..#.#..
###.###
...@...
###.###
..#.#..
..#.#..
0 0


Sample Output
45
59
6

13

#include<stdio.h>              //DFS#include<string.h>int sum,n,m;char map[25][25];int use[25][25];int dir[4][2]{-1,0,0,-1,1,0,0,1};void DFS(int x,int y){    int i,dx=x,dy=y;    for(i=0;i<4;i++)    {        dx=x+dir[i][0];        dy=y+dir[i][1];        if(dx>=0&&dx<n&&dy>=0&&dy<m&&map[dx][dy]=='.'&&!use[dx][dy])        {            sum++;            use[dx][dy]=1;            DFS(dx,dy);        }    }    return ;}int main(){    int i,j,k,x1,y1,w;    while(scanf("%d%d",&m,&n)!=EOF)    {        if(m==0&&n==0)            break;        memset(use,0,sizeof(use));        sum=1;        w=0;        for(i=0;i<n;i++)            scanf("%s",map[i]);        for(i=0;i<n;i++)        {            for(j=0;j<m;j++)            {                if(map[i][j]=='@')                {                    use[i][j]=1;                    DFS(i,j);                    w=1;                    break;                }            }            if(w==1)                break;        }        printf("%d\n",sum);    }return 0;}





BFS:一个人在@点,他只能走.不能走#,问他在地图上最多能走多少步,
DFS水题,弱爆了的我还是写了很久,太年轻,还是要多联系,
然后我用BFS写了一次:
也是弱爆了写了40分钟,
第一个 方向数组循环不用4用n,也是够傻的;
第二个:sum++和step++的区别没分开,傻了一样在结构体里面用step;
第三个,傻了半天为什么是sum是0,根本没有调用BFS函数还在到处差错,傻;

#include<stdio.h>     //BFS#include<string.h>#include<queue>using namespace std;#define MAXN 25char map[MAXN][MAXN];int use[MAXN][MAXN];struct node{    int x;    int y;}ans;int n,m,sum;int dir[4][2]={-1,0,0,-1,1,0,0,1};queue<node> que;void BFS(){    while(que.size())    {        node tem=que.front();        que.pop();        node next;        for(int i=0;i<4;i++)        {            next.x=tem.x+dir[i][0];            next.y=tem.y+dir[i][1];            if(next.x>=0&&next.x<n&&next.y>=0&&next.y<m&&!use[next.x][next.y]&&map[next.x][next.y]=='.')            {                sum++;                use[next.x][next.y]=1;                que.push(next);            }        }    }}int main(){    while(scanf("%d%d",&m,&n)!=EOF,n&&m)    {        memset(use,0,sizeof(use));        sum=1;        for(int i=0;i<n;i++)            scanf("%s",map[i]);        for(int i=0;i<n;i++)            for(int j=0;j<m;j++)            {                if(map[i][j]=='@')                {                    use[i][j]=1;                    ans.x=i;                    ans.y=j;                    que.push(ans);                    BFS();                }            }        printf("%d\n",sum);    }}



0 0
原创粉丝点击