TOJ2470

#include <stdio.h>

struct node{
    int x;
    int y;
    int step;
}first;

int zx[4]={-1,0,1,0};
int zy[4]={0,-1,0,1};
int a[10][10];

node queue[100]={0};
int head=0,tail=0;
int b[10][10]={0};
int flagx,flagy,flag1x,flag1y;

//进栈
void  en(node E)
{
    queue[tail++]=E;
}

//出栈
node qe()
{
    return queue[head++];
}

void bfs()
{
    first.x=flagx;
    first.y=flagy;
    en(first);
    b[first.x][first.y]=1;
    node cur={};
    node ns={};
	int d1=1,d2=0,d3=0,d4=0;
    while(head<tail)
    {
        cur=qe();
		printf("%d %d\n",cur.x ,cur.y);
        if(cur.x==flag1x&&cur.y==flag1y)
        {
            printf("%d\n",cur.step);
            break;
        }

            for(int i=0;i<4;i++)
            {
				ns=cur;
				ns.x=ns.x+zx[i];
				ns.y=ns.y+zy[i];
				//直走
				if(i==0)
				{
					if(a[ns.x][ns.y]==‘.‘||a[ns.x][ns.y]==‘T‘)
					{
						if(!b[ns.x][ns.y])
						{
							b[ns.x][ns.y]=1;
							d1++;
							d2=0;
							d3=0;
							d4=0;
							if(d1==1)
								ns.step++;
							ns.step++;
							printf("step=%d\n",ns.step);
							en(ns);

						}
					}
				}
				//后退
				if(i==2)
				{
					if(a[ns.x][ns.y]==‘.‘||a[ns.x][ns.y]==‘T‘)
					{
						if(!b[ns.x][ns.y])
						{
							b[ns.x][ns.y]=1;
							d1=0;
							d2=0;
							d3=0;
							d4++;
							if(d4==1)
								ns.step++;
							ns.step++;
							printf("step=%d\n",ns.step);
							en(ns);
						}
					}
				}
				//左转
				if(i==1)
				{
					if(a[ns.x][ns.y]==‘.‘||a[ns.x][ns.y]==‘T‘)
					{
						if(!b[ns.x][ns.y])
						{
							b[ns.x][ns.y]=1;
							d1=0;
							d2++;
							d3=0;
							d4=0;
							if(d2==1)
								ns.step++;
							ns.step++;
						printf("step=%d\n",ns.step);
							en(ns);
						}
					}
				}
				//右转
				if(i==3)
				{
					if(a[ns.x][ns.y]==‘.‘||a[ns.x][ns.y]==‘T‘)
					{
						if(!b[ns.x][ns.y])
						{
							b[ns.x][ns.y]=1;
							d1=0;
							d2=0;
							d3++;
							d4=0;
							if(d3==1)
								ns.step++;
							ns.step++;
							printf("step=%d\n",ns.step);
							en(ns);
						}
					}
				}
			 }
      }
}

void main()
{
    int t,w,l;
        scanf("%d %d",&w,&l);
        for(int i=0;i<w;i++)
        {
            getchar();
            for(int j=0;j<l;j++)
            {
                scanf("%c",&a[i][j]);
                if(a[i][j]==‘S‘)
                {
                    flagx=i;
                    flagy=j;
                    a[i][j]=‘#‘;
                }

                if(a[i][j]==‘T‘)
                {
                    flag1x=i;
                    flag1y=j;
                }
            }
        }
        first.step=0;
        bfs();

}

  

时间: 2024-10-15 00:32:11

TOJ2470的相关文章