poj3009 Curling 2.0---bfs

来源:互联网 发布:叮当猫网络什么意思 编辑:程序博客网 时间:2024/05/14 11:33




#include <iostream>#include <cstring>#include <string>#include <cstdio>#include <cmath>#include <algorithm>#include <vector>#include <queue>#include <map>#define inf 0x3f3f3f3fusing namespace std;int ans,a[25][25],sr,sc,er,ec,n,m,step;int dx[]={1,-1,0,0};int dy[]={0,0,1,-1};void dfs(int r,int c){    int i,x,y;    if(step>=10) return ;    for(i=0;i<4;i++)    {        x=r;y=c;        while(1)        {            x+=dx[i];            y+=dy[i];            if(x<0||x>=m||y<0||y>=n) break;            if(x==er&&y==ec)            {                step++;                if(step<ans) ans=step;                step--;                return ;            }            else if(a[x][y]==1)            {                if(x-dx[i]!=r||y-dy[i]!=c)//如果不是起点                {                    a[x][y]=0;                    step++;                    dfs(x-dx[i],y-dy[i]);                    a[x][y]=1;                    step--;                }                break;            }        }    }}int main(){    int i,j;    while(scanf("%d%d",&n,&m)&&(n||m))    {        for(i=0;i<m;i++)            for(j=0;j<n;j++)            {                scanf("%d",&a[i][j]);                if(a[i][j]==2)                {                    sr=i;                    sc=j;                }                else if(a[i][j]==3)                {                    er=i;                    ec=j;                }            }        ans=inf;        step=0;        dfs(sr,sc);        printf("%d\n",ans==inf?-1:ans);    }    return 0;}


0 0
原创粉丝点击