Sicily 2002 Feeding Time

来源:互联网 发布:curl php extension 编辑:程序博客网 时间:2024/05/17 08:34

简单的图遍历问题,我一开始用dfs,结果750*750的数据就爆栈空间了,改用bfs就AC了。


#include <iostream>#include <cstring>#include <queue>using namespace std;int w, h, d[855][855], vis[855][855], ans;void deal(int x, int y, queue<int> & q)//判断是否合法,是否访问过,然后压进队列中{  if (x < h && x >= 0 && y < w && y >= 0 && d[x][y] && !vis[x][y])  {    vis[x][y] = 1;    q.push(x*w+y);  }}int main(){  int i, j, tmax = -1;  string s;  cin >> w >> h;  for (i = 0; i < h; ++ i)  {    cin >> s;    for (j = 0; j < s.size(); ++ j ) if (s[j] == '.') d[i][j] = 1;//建01图  }  for (i = 0; i < h; ++ i)    for (j = 0; j < w; ++ j) if (!vis[i][j] && d[i][j])    {      ans = 0;      queue<int> q;      q.push(i*w+j);      vis[i][j] = 1;//第一个点要注意vis数组的操作      while (!q.empty())      {        int t = q.front();        q.pop();        int x = t / w;        int y = t % w;        ++ ans;        deal(x+1, y, q);        deal(x, y+1, q);        deal(x-1, y, q);        deal(x, y-1, q);        deal(x+1, y+1, q);        deal(x+1, y-1, q);        deal(x-1, y+1, q);        deal(x-1, y-1, q);      }      if ( ans > tmax ) tmax = ans;    }  cout << tmax << endl;  return 0;}


0 0
原创粉丝点击