POJ 3026 Borg Maze
2010-10-21 20:13
288 查看
一个迷宫中有若干个外星人,现在一批人从起点出发去抓他们,在起点或每次抓到一个人后,可以选择分成若干拨分头去抓,求抓完所有外星人时,每拨人走的路径和的最小值,即求使每个点(起点和外星人所在点)连通的最短路径
代码:
代码:
#include<iostream> #include<queue> using namespace std; #define MAX 105 #define inf 0x3f3f3f3f struct node { int x; int y; int step; }m[MAX]; int dis[MAX]; int u[MAX][MAX],map[MAX][MAX]; int g[MAX][MAX]; int dir[4][2]={{0,1},{0,-1},{-1,0},{1,0}}; int l,r,cnt; void bfs(struct node s,int k) { struct node a,b; int i,num=cnt-1; memset(u,0,sizeof(u)); u[s.x][s.y]=1; queue<node>q; s.step=0; q.push(s); while(!q.empty()) { a=q.front(); q.pop(); for(i=0;i<4;i++) { b.x=a.x+dir[i][0]; b.y=a.y+dir[i][1]; if(!u[b.x][b.y]&&map[b.x][b.y]>=0) { b.step=a.step+1; u[b.x][b.y]=1; if(map[b.x][b.y]>0) { g[k][map[b.x][b.y]]=g[map[b.x][b.y]][k]=b.step; num--; if(num==0) return; } q.push(b); } } } } int min(int a,int b) { return a<b?a:b; } int prim() { int i,j,ans,min_w,min_node,now; for(i=1;i<=cnt;i++) dis[i]=inf; now=1; ans=0; for(i=1;i<cnt;i++) { min_w=inf; dis[now]=-1; for(j=1;j<=cnt;j++) { if(j!=now&&dis[j]>=0) { dis[j]=min(dis[j],g[now][j]); if(dis[j]<min_w) { min_w=dis[j]; min_node=j; } } } ans+=min_w; now=min_node; } return ans; } int main() { int i,j,test,ans; char c,str[MAX]; scanf("%d",&test); while(test--) { scanf("%d %d",&l,&r); gets(str);//读掉l,r后面的空格 memset(map,0,sizeof(map)); memset(m,0,sizeof(m)); memset(g,0,sizeof(g)); cnt=0; for(i=1;i<=r;i++) { for(j=1;j<=l;j++) { scanf("%c",&c); if(c=='#') { map[i][j]=-1; } else if(c=='S'||c=='A') { cnt++; map[i][j]=cnt; m[cnt].x=i; m[cnt].y=j; } else map[i][j]=0; } getchar(); } for(i=1;i<=cnt;i++) { bfs(m[i],i); } ans=0; ans=prim(); printf("%d/n",ans); } system("pause"); return 0; }
相关文章推荐
- Borg Maze poj 3026
- poj 3026 Borg Maze(最小生成树)
- POJ 3026 Borg Maze(bfs+最小生成树)
- POJ 3026 Borg Maze(kuangbin带你飞 专题六:最小生成树,完结)
- POJ-3026 Borg Maze
- poj 3026 Borg Maze dfs+prim
- POJ3026——Borg Maze(BFS+最小生成树)
- 【POJ 3026】Borg Maze
- POJ 3026 Borg Maze
- POJ3026——Borg Maze
- POJ - 3026 Borg Maze解题报告(Kruskal+Bfs)
- Borg Maze poj 3026
- Poj 3026 Borg Maze
- poj 3026( Borg Maze BFS + Prim)
- POJ-3026--Borg&nbsp;Maze
- POJ 3026 Borg Maze
- POJ 3026 Borg Maze(BFS + 最小生成树)
- POJ-3026 Borg Maze BFS+最小生成树
- POJ 3026 Borg Maze
- POJ 3026 Borg Maze BFS+最小生成树