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

}

最新文章

  1. Jquery垂直下拉二级菜单
  2. iOS的UIDevice,NSBundle,NSLocale
  3. imshow() displays a white image for a grey image
  4. css-高度自适应的问题(body高度问题)
  5. 替代jquery
  6. Longest Valid Parentheses(最长有效括号)
  7. android中的一些问题
  8. Linux服务器常用性能监控命令汇总
  9. [置顶] Android JNI必须掌握的五点
  10. ionic开发环境搭建
  11. 多路查找树之2-3-4树和B树 - 数据结构和算法82
  12. 批量抓取cisco设备配置脚本编写(expect/sed/awk/shell)
  13. vue-cli脚手架安装和webpack-simple模板项目生成
  14. UVA 11149-Power of Matrix(等比矩阵求和)
  15. Android 2018最新验证手机号正则表达式
  16. [ 转载 ] Handler详解
  17. Kinect2.0相机标定
  18. 我的小游戏上线海外AppStore完整流程心得
  19. mysql下的将多个字段名的值复制到另一个字段名中(批量更新数据)字符串拼接cancat实战例子
  20. java.io.CharConversionException: Not an ISO 8859-1 character:

热门文章

  1. SVN:项目管理工具
  2. composer install 时,提示:Package yiisoft/yii2-codeception is abandoned, you should avoid using it. Use codeception/codeception instead.的解决
  3. maven 无法下载私服jar包,如刚上传的第三方jar包无法下载。。
  4. 共享内存system v(未编译)
  5. Java代码实现依赖注入
  6. 2018.09.28 牛客网contest/197/A因子(唯一分解定理)
  7. HDU 5956 The Elder (树上斜率DP)
  8. Java synchronized关键字的理解
  9. MySQL之SQL语句零碎总结
  10. Python中的replace方法