#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之XSS攻击

    一.什么是XSS攻击 xss攻击:----->web注入    xss跨站脚本攻击(Cross site script,简称xss)是一种“HTML注入”,由于攻击的脚本多数时候是跨域的,所以称 ...

  2. 品味性能之道<七>:索引基础

    一.索引概述      索引(index),它是数据库必不可少的一部分.它其实很简单呐!很好理解.      索引好比如一本书的目录,一张地图,一个写字楼里挂在大堂墙上的公司名录,一个地铁站的出口指示 ...

  3. Type mismatch in value from map: expected org.apache.hadoop.io.longWritable

    hadoop 编译的程序的报错 执行了命令: hadoop fs -put HTTP_20130313143750.dat /date.dochadoop jar MyDataCount.jar co ...

  4. HDU 5956 The Elder (树上斜率DP)

    题意:给定上一棵树,然后每条边有一个权值,然后每个点到 1 的距离有两种,第一种是直接回到1,花费是 dist(1, i)^2,还有另一种是先到另一个点 j,然后两从 j 向1走,当然 j 也可以再向 ...

  5. VBA替换函数

    Sub test() On Error Resume Next Dim arr1, arr2, i, j arr1 = Range("T1:EI3") arr2 = Range(& ...

  6. AirplaceLogger源代码解析

    将源代码添加进Eclipse中,右键-->Import-->Existing Projects into Workspace-->选择AirplaceLogger源代码文件夹即可导入 ...

  7. Java中的I/O 线程 网络

    Java学习总结--I/O,线程,网络题目整理 I/O 1.有什么理由必须要用字符流? 答:处理字符数据的语法更方便.自动化字符编码 2.插入哪些代码可以让下面的代码正确编译? Console con ...

  8. hdu1002 A + B Problem II(高精度加法) 2016-05-19 12:00 106人阅读 评论(0) 收藏

    A + B Problem II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  9. PAT甲 1012. The Best Rank (25) 2016-09-09 23:09 28人阅读 评论(0) 收藏

    1012. The Best Rank (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue To eval ...

  10. Scala中()与{}

    Scala中()与{}的关系 在Scala中有些时候()和{}是可以相互替换的,但是如果不弄清楚到底什么时候该用(),什么时候该用{},什么时候二者可以相互替换,那么在写代码的时候难免为出错,并且自己 ...