POJ 3984 迷宫问题

题意:0可以走,1不可以走;

正确做法应该是广搜(逃

但是窝懒得看了,,回头再补,,

用dfs水过去了,,忧桑,,

AC代码:

#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <queue>
const int dx[4]= {0,0,1,-1};
const int dy[4]= {1,-1,0,0};
using namespace std;
int n,m,vis[101][101],k1,f;
int s[10][10];
struct node
{
    int x1;
    int y1;
} s1[1010];
void dfs(int x,int y)
{
     s1[k1].x1=x;
    s1[k1++].y1=y;
    if(x==4&&y==4)
    {
        for(int i=0; i<k1; i++)
        {
            printf("(%d, %d)\n",s1[i].x1,s1[i].y1);
        }
        f=1;
        return ;
    }
    for(int i=0; i<4; i++)
    {
        int kx=x+dx[i];
        int ky=y+dy[i];
        if(kx>=0&&kx<5&&ky>=0&&ky<5&&vis[kx][ky]==0&&s[kx][ky]==0)
        {
            vis[kx][ky]=1;
            dfs(kx,ky);
            if(f==1)
            {
                return ;
            }
            k1--;
            vis[kx][ky]=0;
        }
    }
    return ;
}
/*void bfs()
{
    queue<node>q;
    s.x=0;
    s.y=0;
    q.push(s);
    while(!q.empty())
    {
        node s1=q.front();
        int kx=s1.x+1;
        int ky=s1.y+1;
        if(kx>=0&&kx<5&&ky>=0&&ky<5&&vis[kx][ky]==0)
        {
            vis[kx][ky]=1;
            k.x=kx;
            k.y=
            q.push()
        }
    }
    while()
}*/
int main()
{
    k1=0;
    f=0;
    memset(vis,0,sizeof(vis));
    for(int i=0; i<5; i++)
    {
        for(int j=0; j<5; j++)
        {
            scanf("%d",&s[i][j]);
        }
    }
    dfs(0,0);
    return 0;
}
View Code

 

posted @ 2015-10-29 19:17  萌萌哒哒哒  阅读(122)  评论(0编辑  收藏  举报