#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();

}

  

TOJ2470的更多相关文章

随机推荐

  1. DataTable的序列化和反序列化

    /// <summary> /// DataTable序列化 /// </summary> /// <param name="dt"></ ...

  2. 一、消息队列之ActiveMQ的安装、配置和C#样例代码

    最近有时间了,研究一下消息队列ActvieMQ,结合自己的实践和网上的一些大家内容,整理如下,所有步骤和链接均是正确的. 1.ActiveMQ ActiveMQ 是Apache出品,最流行的,能力强劲 ...

  3. mysql对emoji的支持

    步骤: 升级mysql数据库到5.5.3+ 修改database.table和column字符集 alter database DATABASE_NAME character set = utf8mb ...

  4. Mockplus是如何节省你的原型时间的?

    还在用老牌原型工具一点点绘制产品原型吗?还在为实现一个满意的交互而绞尽脑汁吗?还在为无法和用户高效沟通而发愁吗?朋友,现在是快速原型的时代了.时间不等人,当你精雕细琢完成产品启动页的时候,别人的原型已 ...

  5. 2018.07.24 bzoj3531: [Sdoi2014]旅行(树链剖分+动态开点)

    传送门 树链剖分. 如何维护? 如果颜色少直接每种颜色一颗线段树走人. 但这题颜色数量不大于1e5" role="presentation" style="po ...

  6. 实现WIFI MAC认证与漫游

    前言 单位里有10来个网件的AP(WNAP210),需要对接入端(主要是手机)进行MAC认证,原来采用AP本地MAC认证,但是人员经常变动(离职),另外人员的岗位(流水线)也经常调整,这样就需在变动后 ...

  7. [K8S]污点调度

    如果不希望某个节点被调度可以使用以下命令进行设置  kubectl taint node master01 node-role.kubernetes.io/master="":No ...

  8. scrapy windows 安装

    windows 7 系统下参照官网安装总是会提示出错,现在整理一下安装的流程 1.安装 python 2.7,添加环境变量 C:\Python27\;C:\Python27\Scripts\; 在 C ...

  9. 通过wsdl生成client 的几种方式

    wsimport 位置 %JAVA_HOME%/bin/wsimport.exe 帮助 wsimport -help Usage: wsimport [options] <WSDL_URI> ...

  10. Node.js使用MySQL的连接池

    使用Nodejs+MySQL肯定比PHP和MySQL的组合更适合做服务器端的开发. 使用Nodejs你会从他的异步行为中获益良多.比如,提升性能,你无须在从已有的MySQL数据库迁移到其他的NoSQL ...