poj 1383 Labyrinth 树的直径
2014-12-02 09:36
183 查看
题意:
给一个迷宫,其中任意两个可以走的点之间只有一条路,求在这个迷宫里最长能走多远。
分析:
求树的直径,两次dfs即可。
代码:
给一个迷宫,其中任意两个可以走的点之间只有一条路,求在这个迷宫里最长能走多远。
分析:
求树的直径,两次dfs即可。
代码:
//poj 1383 //sep9 #include <iostream> using namespace std; const int maxN=1024; char g[maxN][maxN]; int d[maxN][maxN]; int r,c; int dx[6]={0,0,1,-1}; int dy[6]={1,-1,0,0}; void dfs(int px,int py,int x,int y,int sum) { d[x][y]=sum; for(int t=0;t<4;++t){ int newx=x+dx[t]; int newy=y+dy[t]; if(newx>=0&&newx<r&&newy>=0&&newy<c&&g[newx][newy]=='.'&&(newx!=px||newy!=py)) dfs(x,y,newx,newy,sum+1); } } int main() { int cases; scanf("%d",&cases); while(cases--){ int i,j; memset(d,0,sizeof(d)); scanf("%d%d",&c,&r); for(i=0;i<r;++i) scanf("%s",g[i]); int ans=0; int sx=-1,sy=-1; for(i=0;i<r&&sx==-1;++i) for(j=0;j<c&&sx==-1;++j) if(g[i][j]=='.'){ sx=i; sy=j; } dfs(-1,-1,sx,sy,0); int maxx=-1,maxi,maxj; for(i=0;i<r;++i) for(j=0;j<c;++j) if(maxx<d[i][j]){ maxx=d[i][j]; maxi=i; maxj=j; } memset(d,0,sizeof(d)); dfs(-1,-1,maxi,maxj,0); for(i=0;i<r;++i) for(j=0;j<c;++j) ans=max(ans,d[i][j]); printf("Maximum rope length is %d.\n",ans); } return 0; }
相关文章推荐
- POJ 1383 Labyrinth (树的直径)
- POJ 1383 Labyrinth (bfs 树的直径)
- Poj 1383--Labyrinth【树的直径】【bfs】
- 【POJ】1383 - Labyrinth(树的直径)
- poj 1383 Labyrinth(树的直径详解,简单明了!)
- poj 1383 Labyrinth(树的直径)
- poj 1383 Labyrinth 【迷宫图 BFS实现 树的直径裸题】
- poj--1383--Labyrinth(树的直径)
- POJ Problem 1383 Labyrinth【树的直径】
- poj--1383--Labyrinth(树的直径)
- 【POj】-1383-Labyrinth(树的直径,地图)
- poj-1383-Labyrinth【树的直径】【经典】
- POJ 1383 Labyrinth(树的直径)
- POJ 1383 Labyrinth(BFS 树的直径)
- POJ 1383--Labyrinth【树的直径】
- POJ 1383 Labyrinth 【树的直径】【真正的图】
- poj 1383 Labyrinth【迷宫bfs+树的直径】
- POJ 1383 Labyrinth (树的直径)
- POJ 1383--Labyrinth【树的直径】
- POJ 1383 Labyrinth(迷宫问题,树的最大直径,经典问题)