SDUT 1269 走迷宫(BFS)

点我看题目

题意:中文不详述。

思路 :上上上场比赛让一个BFS给虐了,上次比赛让一个三维的给废掉了。。。。。。。所以急于从水题刷起。。。。。。还因为数组开小了WA了5,6次

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>

using namespace std;

int m,n,sx,sy,ex,ey ;
int mapp[17][17] ;
int vis[17][17] ;
int mpx[400],mpy[400] ;
int dire[4][2] = {{0,-1},{-1,0},{0,1},{1,0}} ;
int flag ;
int step ;

void DFS(int x,int y)
{
    if(x == ex && y == ey)
    {
        flag = 1 ;
        for(int i = 1 ; i < step ; i++)
            printf("(%d,%d)->",mpx[i],mpy[i]) ;
        printf("(%d,%d)
",ex,ey) ;
    }
    else
    {
        for(int i = 0 ; i < 4 ; i++)
        {
            int xx = x+dire[i][0] ;
            int yy = y+dire[i][1] ;
            if(mapp[xx][yy] && xx >= 1 && xx <= m && yy >= 1 && yy <= n && !vis[xx][yy])
            {
                step++ ;
                vis[xx][yy] = 1 ;
                mpx[step] = xx ;
                mpy[step] = yy ;
                DFS(xx,yy) ;
                vis[xx][yy] = 0 ;
                step-- ;
            }
        }
    }
}
int main()
{
    while(~scanf("%d %d",&m,&n))
    {
        memset(vis,0,sizeof(vis)) ;
        memset(mpx,0,sizeof(mpx)) ;
        memset(mpy,0,sizeof(mpy)) ;
        for(int i = 1 ; i <= m ; i++)
            for(int j = 1 ; j <= n ; j++)
                scanf("%d",&mapp[i][j]) ;
        scanf("%d %d",&sx,&sy) ;
        scanf("%d %d",&ex,&ey) ;
        step = 1 ;
        mpx[1] = sx ;
        mpy[1] = sy ;
        vis[sx][sy] = 1;
        flag = 0 ;
        DFS(sx,sy) ;
        if(!flag)
            printf("-1
") ;
    }
    return 0;
}
 
 
View Code
原文地址:https://www.cnblogs.com/luyingfeng/p/3618631.html