TOJ_12470
#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的更多相关文章
随机推荐
- vue父子间通信
父组件是通过props属性给子组件通信的来看下代码: 父组件: <parent> <child :child-com="content"></chil ...
- [精彩] 关于DB2的内存分配
这两天在看DB2的内存管理的内容,看的很是模糊,有以下问题不明白,请教 是不是数据库管理器的共享内存就是DB2能够使用的最大内容呢,然后数据库全局内存从管理器内存那里获得分配的内存,然后应用程序全局内 ...
- win7 一切软件都安装不上 解决 把他卸掉
KB2962872 控制面板,添加删除程序,查看已更新
- Django(3)
https://www.cnblogs.com/yuanchenqi/articles/7429279.html
- linux中nfs启动报rpcbind.socket failed to listen on sockets: Address family not supported by protocol
1.systemctl start rpcbind.service 报错: [root@autodeploy ~]# journalctl -xe -- Support: http://lists.f ...
- node.js初步总结
一:先上一段代码 process.argv.forEach(function (val, index, array) { console.log(index + ":" + ...
- public static void main(String[] args)说明
/*public static void main(String[] args) 主函数特殊之处:1,格式是固定的.2,被jvm所识别和调用. public:因为权限必须是最大的.static:不需要 ...
- Java解决高并发方案(帮助你我他)
一个小型的网站,可以使用最简单的html静态页面就实现了,配合一些图片达到美化效果,所有的页面均存放在一个目录下,这样的网站对系统架构.性能的要求都很简单.随着互联网业务的不断丰富,网站 ...
- Java多线程-并发协作(生产者消费者模型)
对于多线程程序来说,不管任何编程语言,生产者和消费者模型都是最经典的.就像学习每一门编程语言一样,Hello World!都是最经典的例子. 实际上,准确说应该是“生产者-消费者-仓储”模型,离开了仓 ...
- (最小生成树)QS Network -- ZOJ --1586
链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1586 http://acm.hust.edu.cn/vjudge/ ...