#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. Django之常用命令以及问题汇总

    基本命令 1.新建一个django项目 django-admin.py startproject project-name 2.新建一个app python manage.py startapp ap ...

  2. java 同步

    本文主要记录java进行同步的方案及锁优化的方法,来自<深入理解jvm> 定义 线程安全:多线程访问一个对象时,不用考虑这些线程在运行时环境下的调度与交替执行,也不需要额外的同步或调用方进 ...

  3. POJ3687.Labeling Balls 拓扑排序

    Labeling Balls Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 13201 Accepted: 3811 Descr ...

  4. AJAX 请求中多出了一次 OPTIONS 请求 导致 Laravel 中间件无法对 Header 传入的 Token 无法获取

    背景知识: 我们会发现,在很多post,put,delete等请求之前,会有一次options请求.本文主要是来讨论一下这是什么原因引起的. 根本原因就是,W3C规范这样要求了!在跨域请求中,分为简单 ...

  5. [Selenium]验证点了某个Button之后无反应

    期望:点了某个Button,无反应 问题:怎么去验证无反应 WebElement webElement = page.getICORemove(); SeleniumUtil.hover(page.g ...

  6. Can't use Subversion command line client: svn. Errors found while svn working copies detection.

    idea 报错: Can't use Subversion command line client: svn. Errors found while svn working copies detect ...

  7. 2018.07.08 POJ 2481 Cows(线段树)

    Cows Time Limit: 3000MS Memory Limit: 65536K Description Farmer John's cows have discovered that the ...

  8. nginx集群tomcat,session共享问题

    tomcat-redis-session-manager版本: apache-tomcat-8.0.32.nginx-1.13.12.redis_3.2.1 github地址: https://git ...

  9. linux配置ip 网关 和dns(转)

    原文地址:http://blog.csdn.net/ztz0223/article/details/5800665 Linux下面配置ip很容易的,并没有网上说的那么复杂,我的linux系统是rhel ...

  10. Python 学习目录

    第一章 Python基础 第二章 Python基础 第三章 Python基础-文件操作&函数 1.python文件处理 2.py-函数基础 3.py-函数进阶 第四章 Python基础-常用模 ...