hdu-1728(bfs+优化)
Posted 2018zxy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu-1728(bfs+优化)相关的知识,希望对你有一定的参考价值。
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1728
注意:1、先输入起点(y1,x1)和终点(y2,x2);
2、如果一个一个遍历会超时。
思路:每次将整一行或列的点全部遍历,然后再寻找是否找过某个点。
#include<iostream> #include<cstdio> #include<cstring> #include<queue> using namespace std; int n,m,x1,y1,x2,y2,k; char a[120][120]; struct Node{ int x,y,step; }; int vis[120][120],zz[4][2]={{0,1},{0,-1},{1,0},{-1,0}}; bool pd(int x,int y) { if(x<0||x>=n||y<0||y>=m||a[x][y]==‘*‘) return false; return true; } void bfs() { if(x1==x2&&y1==y2) { cout<<"yes"<<endl; return ; } queue <Node> q; memset(vis,0,sizeof(vis)); Node tmp,tp; tmp.x=x1-1;tmp.y=y1-1;tmp.step=-1; vis[x1-1][y1-1]=1; q.push(tmp); while(!q.empty()) { tmp=q.front(); q.pop(); for(int i=0;i<4;i++) { tp.x=tmp.x+zz[i][0]; tp.y=tmp.y+zz[i][1]; while(pd(tp.x,tp.y)) { if(vis[tp.x][tp.y]==0) { tp.step=tmp.step+1; vis[tp.x][tp.y]=1; if(tp.x==x2-1&&tp.y==y2-1&&tp.step<=k) { cout<<"yes"<<endl; return ; } q.push(tp); } tp.x+=zz[i][0]; tp.y+=zz[i][1]; } } } cout<<"no"<<endl; return ; } int main(void) { int i,j,T; cin>>T; while(T--) { cin>>n>>m; for(i=0;i<n;i++) scanf("%s",a[i]); cin>>k>>y1>>x1>>y2>>x2; bfs(); } return 0; }
参考文章:https://blog.csdn.net/flynn_curry/article/details/52901207
以上是关于hdu-1728(bfs+优化)的主要内容,如果未能解决你的问题,请参考以下文章