POJ 3009 Curling 2.0

来源:互联网 发布:淘宝都是假货吗 编辑:程序博客网 时间:2024/04/23 18:18

原题链接

思路:深搜

AC代码:

#include <iostream>#include <cstdio> #include <algorithm>#include <cstdlib>#include <cstring>#define INF 1000000using namespace std;//dfs深度搜索 typedef pair<int,int> PII;int data[22][22];int sx,sy,minstep,w,h;int dx[4]={1,-1,0,0},dy[4]={0,0,1,-1};int min(int a,int b){    return a<b?a:b;}void dfs(int x,int y,int step){    if(step>=10)  return;    for(int i=0;i<4;i++){        if(data[x+dx[i]][y+dy[i]]==1)  continue;        int nx=x,ny=y;        int flag=0;        while(1){            nx+=dx[i];            ny+=dy[i];            if(nx<0 || nx>=h || ny<0 || ny>=w){                flag=1;                break;            }            if(data[nx][ny]==0)  continue;            if(data[nx][ny]==1)  break;            if(data[nx][ny]==3){                minstep=min(minstep,step+1);                return;            }        }        if(flag)  continue;        data[nx][ny]=0;        dfs(nx-dx[i],ny-dy[i],step+1);        data[nx][ny]=1;    }}int main(){    int i,j;    while(scanf("%d %d",&w,&h) && w && h){        for(i=0;i<h;i++){            for(j=0;j<w;j++){                scanf("%d",&data[i][j]);                getchar();                if(data[i][j]==2){                    sx=i,sy=j;                    data[i][j]='0';                }            }        }        minstep=11;        dfs(sx,sy,0);        if(minstep==11) printf("-1\n");        else printf("%d\n",minstep);    }    return 0;}
1 0
原创粉丝点击