首页 > 代码库 > 机器人

机器人

#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={};
    while(head<tail)
    {
        cur=qe();
        printf("%d %d\n",cur.x,cur.y);
        if(cur.x==flag1x&&cur.y==flag1y)
        {
            printf("%d",cur.step);
            break;

        }

        for(int i=0;i<4;i++)
        {
            ns=cur;
            if(i==0)
            {
                ns.x--;
                if(a[ns.x][ns.y]==.)
                {
                    if(!b[ns.x][ns.y])
                    {
                        b[ns.x][ns.y]=1;
                        ns.step++;
                        en(ns);
                    }
                }
            }
        }

        //左转
            for(int i=0;i<4;i++)
            {
                ns=cur;
                if(i==1)
                {
                    ns.y--;
                    if(a[ns.x][ns.y]==.)
                    {
                        if(!b[ns.x][ns.y])
                        {
                            b[ns.x][ns.y]=1;
                            ns.step++;
                            if(a[ns.x]!=a[cur.x])
                            {
                                ns.step++;
                            }
                            en(ns);
                        }
                    }
                }
            }

            //右转
            for(int i=0;i<4;i++)
            {
                ns=cur;
                if(i==3)
                {
                    ns.y++;
                    if(a[ns.x][ns.y]==.)
                    {
                        if(!b[ns.x][ns.y])
                        {
                            b[ns.x][ns.y]=1;
                            ns.step++;
                            if(a[ns.x]!=a[cur.x])
                            {
                                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;
                }
            }
        }
        //printf("%d %d",flagx,flagy);
        first.step=0;
        bfs();

}

 

机器人