首页 > 代码库 > hdu--2579--第二次与女孩的约会
hdu--2579--第二次与女孩的约会
我去....这题 真无语了
忘记清空队列了....当然 你要是将队列声明在函数中 就没这个烦恼了 每次调用相当于清空了
而我 是将它声明为全局变量的...
卧槽了 坑死了
这题 抛开这个不讲
女孩子还是很有心思的...
要用三维vis数组 第三位表示的状态是移动到那一步%k所余的时间 因为题目条件的特殊性 石头在time%k==0的时候会消失 所以需要这样设、
除了这一点之外 其它没什么了 是个很普通的bfs 从一层状态搜索到下一层的状态
1 #include <iostream> 2 #include <cstring> 3 #include <queue> 4 using namespace std; 5 6 const int size = 110; 7 int stx , sty; 8 int n , m , k; 9 int dir[4][2] = {1,0,-1,0,0,1,0,-1};10 char mp[size][size];11 bool vis[size][size][15];12 struct node13 {14 int x;15 int y;16 int step;17 node( int a , int b , int c ):x(a),y(b),step(c){};18 node(){};19 };20 queue<node>q;21 22 int bfs( )23 {24 while(!q.empty())25 q.pop();26 int ans = -1;27 int xx , yy , step;28 node now;29 q.push( node(stx,sty,0) );30 vis[stx][sty][0] = true;31 while( !q.empty() )32 {33 now = q.front();34 q.pop();35 if( mp[now.x][now.y] == ‘G‘ )36 return now.step;37 for( int i = 0 ; i<4 ; i++ )38 {39 xx = now.x + dir[i][0];40 yy = now.y + dir[i][1];41 step = (now.step+1)%k;42 if( xx>=1 && xx<=n && yy>=1 && yy<=m && !vis[xx][yy][step] )43 {44 if( mp[xx][yy] == ‘#‘ && !step )45 {46 q.push( node(xx,yy,now.step+1) );47 vis[xx][yy][step] = true;48 }49 if( mp[xx][yy]!=‘#‘ )50 {51 q.push( node(xx,yy,now.step+1) );52 vis[xx][yy][step] = true;53 }54 }55 }56 }57 return ans;58 }59 60 int main()61 {62 cin.sync_with_stdio(false);63 int t , ans;64 cin >> t;65 while(t--)66 {67 cin >> n >> m >> k;68 memset( vis , false , sizeof(vis) );69 for( int i = 1 ; i<=n ; i++ )70 {71 for( int j = 1 ; j<=m ; j++ )72 {73 cin >> mp[i][j];74 if( mp[i][j] == ‘Y‘ )75 {76 stx = i;77 sty = j;78 }79 }80 }81 ans = bfs( );82 if( ans == -1 )83 cout << "Please give me another chance!" << endl;84 else85 cout << ans << endl;86 }87 return 0;88 }
today:
某天
你无端想起一个人
她曾让你对明天有所期望
但是却完全没有出现在你的明天里
hdu--2579--第二次与女孩的约会
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。