poj 3984

模拟队列,用map记录是否已经走过


用递归输出路径,这个题目用深搜应该不行的


理解这种思想,广搜就简单了


#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;

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

struct t{
    int x,y;
    int pre;
}ans[100];

void print(int t){
    if(ans[t].pre!=-1){
        print(ans[t].pre);
        printf("(%d, %d)\n",ans[t].x,ans[t].y);
    }
}

void deal(int n,int m)
{
    int f=0,r=1;
    ans[0].x=n;
    ans[0].y=m;
    ans[0].pre=-1;

    while(f<r){
        for(int i=0;i<4;i++){
            int tempx=ans[f].x+dx[i];
            int tempy=ans[f].y+dy[i];

            if(tempx<0||tempy<0||tempx>=5||tempy>=5||map[tempx][tempy])
                continue;
            else{
                ans[r].x=tempx;
                ans[r].y=tempy;
                ans[r].pre=f;
                r++;
                map[tempx][tempy]=1;
            }

            if(tempx==4&&tempy==4)
                print(f);
        }
        f++;
    }

}

int main()
{
    for(int i=0;i<5;i++)
        for(int j=0;j<5;j++)
            scanf("%d",&map[i][j]);

    printf("(0, 0)\n");
    deal(0,0);
    printf("(4, 4)\n");

    return 0;
}


你可能感兴趣的:(poj 3984)