博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu1728--------坑爹啊
阅读量:4308 次
发布时间:2019-06-06

本文共 1469 字,大约阅读时间需要 4 分钟。

尼玛,就因为没发现‘yes’写成‘yrs’。整整让哥找了一个小时的bug。有没有..........此刻,内流满面!

 

分析:

开始以为是单纯的BFS,结果WA无数次!!

后来分析后发现是要找到不超过转向次数的转向路径,

最重要的是已经访问的节点不能直接标记为已经访问。因为存在远距离但是转向少的情况,所以要标记上每一个已经访问的点到起点所需要的转弯次数。

#include<cstdio>                //这题和连连看一样,走过的点可以再次访问

#include<queue>
#include<cstring>
using namespace std;
#define inf 1000000

int result;                     //初始化为0,结果能走到就为1

char map[105][105];
int visit[105][105];             //初始化为inf ,visit[i][j] 记录走过该点是的最小转弯次数
int fang[4][2]={
{0,-1},{0,1},{1,0},{-1,0}};
int  n,m;
struct node
{
 int x;
 int y;
 int d;        //记录当前该点的方向
 int num;
};

 

void bfs(int k,int x1,int y1,int x2,int y2)

{
 queue<node> qu;
 int i,j;
 node t,tt;
 t.x=x1;
 t.y=y1;
 t.d=-1;
 t.num=0;
 visit[x1][y1]=0;
 qu.push(t);
 
 while(!qu.empty())
 {
  t=qu.front();
  qu.pop();
  if(t.x==x2&&t.y==y2&&t.num<=k)
  {
   result=1;
   return ;
  }
  
  for(i=0;i<4;i++)
  {
   tt.x=t.x+fang[i][0];
   tt.y=t.y+fang[i][1];
   
   if(t.d==-1)
   tt.num=0;
   else if(t.d!=i)
   tt.num=t.num+1;
   else
   tt.num=t.num;
   
   tt.d=i;
   if(tt.x<1||tt.y<1||tt.x>m||tt.y>n)
   continue;
   if(map[tt.x][tt.y]=='.'&&tt.num<=visit[tt.x][tt.y])
   {
    visit[tt.x][tt.y]=tt.num;
    qu.push(tt);
   }
  }
 }
}

int main()

{
 int i,j;
 int t;
 int k,x1,y1,x2,y2;
 scanf("%d",&t);
 while(t--)
 {
  scanf("%d%d",&m,&n);                 //m行,n列
  getchar();
  for(i=1;i<=m;i++)
  {
   for(j=1;j<=n;j++)
   {
    scanf("%c",&map[i][j]);
    visit[i][j]=inf;
   }
   getchar();
  }
  scanf("%d%d%d%d%d",&k,&y1,&x1,&y2,&x2);
  
  result=0;
  bfs(k,x1,y1,x2,y2);
  if(result==1)
  printf("yes\n");
  else
  printf("no\n");
 }
 return 0;
}

 

转载于:https://www.cnblogs.com/zhangyabin---acm/archive/2012/04/05/2433691.html

你可能感兴趣的文章
XamarinAndroid组件教程RecylerView适配器设置动画示例
查看>>
Shell 示例:利用 $RANDOM 产生随机整数
查看>>
网络基础
查看>>
海量数据处理之倒排索引
查看>>
Repeater\DataList\GridView实现分页,数据编辑与删除
查看>>
software testing hw2- find the error
查看>>
maven系列一:pom.xml文件详解
查看>>
Python基础实践-密码管理系统实例
查看>>
iOS工作笔记之NSClassFromString
查看>>
PING检查网络是否畅通
查看>>
李宁-2015年7月13日-个人文档
查看>>
C# 通过URL获取图片并显示在PictureBox上的方法
查看>>
矩阵学习摘记,欢迎指正
查看>>
2018.08.02 hdu1558 Segment set(并查集+计算几何)
查看>>
2019.03.29 NOIP训练 友好国度(点分治+容斥)
查看>>
实验1.1
查看>>
2015 多校第三场
查看>>
CSS基础
查看>>
浅蓝色设计类网站模板
查看>>
QT中的pro文件
查看>>