标签:des style blog http io color ar os sp
2 3 3 ### #.# ### 7 6 ####### #.#.### #.#.### #.#.#.# #.....# #######
Maximum rope length is 0. Maximum rope length is 8.
解题:求树的直径
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 #include <algorithm> 6 #include <climits> 7 #include <vector> 8 #include <queue> 9 #include <cstdlib> 10 #include <string> 11 #include <set> 12 #include <stack> 13 #define LL long long 14 #define pii pair<int,int> 15 #define INF 0x3f3f3f3f 16 using namespace std; 17 const int maxn = 1010; 18 char mp[maxn][maxn]; 19 int col,row,vis[maxn][maxn],tx,ty; 20 const int dir[4][2] = {-1,0,1,0,0,1,0,-1}; 21 queue< pii > q; 22 int bfs(int sx,int sy){ 23 while(!q.empty()) q.pop(); 24 q.push(make_pair(sx,sy)); 25 memset(vis,-1,sizeof(vis)); 26 vis[sx][sy] = 0; 27 int mxlen = 0; 28 while(!q.empty()){ 29 int x = q.front().first; 30 int y = q.front().second; 31 q.pop(); 32 if(vis[x][y] > mxlen) mxlen = vis[tx = x][ty = y]; 33 for(int i = 0; i < 4; ++i){ 34 int nx = x + dir[i][0]; 35 int ny = y + dir[i][1]; 36 if(mp[nx][ny] == ‘#‘ || vis[nx][ny] > -1) continue; 37 vis[nx][ny] = vis[x][y] + 1; 38 q.push(make_pair(nx,ny)); 39 } 40 } 41 return mxlen; 42 } 43 int main() { 44 int T; 45 scanf("%d",&T); 46 while(T--){ 47 scanf("%d %d",&col,&row); 48 for(int i = 0; i < row; ++i) 49 scanf("%s",mp[i]); 50 bool flag = true; 51 for(int i = 1; flag&&i < row; ++i){ 52 for(int j = 1; flag&&j < col; ++j){ 53 if(mp[i][j] == ‘.‘){ 54 flag = false; 55 bfs(i,j); 56 printf("Maximum rope length is %d.\n",bfs(tx,ty)); 57 } 58 } 59 } 60 } 61 return 0; 62 }
标签:des style blog http io color ar os sp
原文地址:http://www.cnblogs.com/crackpotisback/p/4103125.html