#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]={0};
int g[10];
int f=0;
node queue[100]={0};

int head=0,tail=0;
int flagx,flagy,flag1x,flag1y;

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

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

void bfs()
{
int b[10][10]={0};
node cur={};
node ns={};
first.x=flagx;
first.y=flagy;
en(first);
b[first.x][first.y]=1;
int d1=1,d2=0,d3=0,d4=0;
printf("%d %d %d\n",first.x ,first.y,first.step);
while(head<tail)
{
cur=qe();
printf("%d %d\n",cur.x ,cur.y); //已经数字入队了
if(cur.x==flag1x&&cur.y==flag1y)
{
g[f++]=cur.step;
break;
}

for(int i=0;i<4;i++)
{
ns=cur;
ns.x=ns.x+zx[i];
ns.y=ns.y+zy[i];
printf("%d %d\n",ns.x,ns.y);
printf("%d %d\n",cur.x,cur.y);
//直走
if(ns.x-cur.x==-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++;
d2=0;
d3=0;
d4=0;
if(d1==1)
ns.step++;
ns.step++;
//printf("step=%d\n",ns.step);
en(ns);

}
}
}
//后退
if(ns.x-cur.x==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=0;
d3=0;
d4++;
if(d4==1)
ns.step++;
ns.step++;
//printf("step=%d\n",ns.step);
en(ns);
}
}
}
//左转
if(ns.y-cur.y==-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(ns.y-cur.y==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=0;
d3++;
d4=0;
if(d3==1)
ns.step++;
ns.step++;
//printf("step=%d\n",ns.step);
en(ns);
}
}
}
}
}

if(cur.x!=flag1x&&cur.y!=flag1y)
{
g[f++]=-1;
}

}

void main()
{
int t,w,l;
scanf("%d",&t);
for(int j=0;j<t;j++)
{
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();
}

for(int i=0;i<f;i++)
printf("%d\n",g[i]);

}

TOJ_12470的更多相关文章

随机推荐

  1. PAT 1010 一元多项式求导 (25)(STL-map+思路)

    1010 一元多项式求导 (25)(25 分)提问 设计函数求一元多项式的导数.(注:x^n^(n为整数)的一阶导数为n*x^n-1^.) 输入格式:以指数递降方式输入多项式非零项系数和指数(绝对值均 ...

  2. Ubuntu下安装VirtualBox并为其添加USB支持

    1.下载VirtualBox软件包和USB支持包 下载网址均为官方网站(可在此查看其使用教程):https://www.virtualbox.org/wiki/Downloads (若下载各平台各版本 ...

  3. c++ 自动对象

    转自: https://www.cnblogs.com/geloutingyu/p/8034904.html 1.自动对象默认情况下,局部变量的生命期局限于所在函数的每次执行期间.只有当定义它的函数被 ...

  4. Ubuntu 网卡多个 IP 地址

    临时添加 IP 地址 首先,让我们找到网卡的 IP 地址.在我的 Ubuntu 15.10 服务器版中,我只使用了一个网卡. 运行下面的命令找到 IP 地址: 复制代码 代码如下: sudo ip a ...

  5. [BAT] xcopy拷贝远程服务器共享文件到本地

    net use * /del /yes NET USE Y: \\10.86.17.243\d$ Autotest123 /user:MSDOMAIN1\doautotester set source ...

  6. winsock select 学习代码(1)

    // SelectCli.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <winsock2.h> #incl ...

  7. js函数在frame中的相互调用详解

    原文章:http://www.jb51.net/article/47557.htm   一个HTML页面可以有一个或多个子框架,这些子框架以<iframe>来标记,用来显示一个独立的HTM ...

  8. python3.4用循环往mysql5.7中写数据并输出

    #!/usr/bin/env python # -*- coding:utf-8 -*- # __author__ = "blzhu" """ pyt ...

  9. HDU 2136 Largest prime factor (素数打表。。。)

    题意:给你一个数,让你求它的最大因子在素数表的位置. 析:看起来挺简单的题,可是我却WA了一晚上,后来终于明白了,这个第一层循环不是到平方根, 这个题和判断素数不一样,只要明白了这一点,就很简单了. ...

  10. ansible facts 获取硬件信息

    facts 指的是 ansible_facts 变量,ansible 中使用 setup 模块来获取,包含系统的大部分基础硬件信息, [root@10_1_162_39 host_vars]# ll ...