首页 > 代码库 > 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 }
View Code

 

today:

  某天

  你无端想起一个人

  她曾让你对明天有所期望

  但是却完全没有出现在你的明天里

 

hdu--2579--第二次与女孩的约会