POJ 3026 Borg Maze BFS+Prim
来源:互联网 发布:淘宝女装长袖连衣裙 编辑:程序博客网 时间:2024/06/05 05:31
题意:给定一个迷宫,在一个迷宫内,建立一颗最小生成树连接所有点。(这些点即‘A’或‘S’)
题解:通过BFS找到'S'与每个’A'之间的最短路径。然后prim 建立最小生成树。
#include <queue>#include <cstring>#include <iostream>using namespace std;#define INF 10000000#define N 52bool vis[N][N];int path[N*2][N*2], map[N][N];int dir[4][2]={{-1,0},{0,1},{1,0},{0,-1}};int row, col, cnt, Brog;struct Node{int x, y, step;} node[N*2];bool isOk ( int a, int b ){if ( a < 0 || a > row || b < 0 || b > col || vis[a][b] == 1 || map[a][b] == -1 )return false;return true;}void bfs (){Node current, next;queue<Node> Q;memset(path,0,sizeof(path));for ( int i = 1; i <= Brog; i++ ){while ( ! Q.empty() ) Q.pop();memset(vis,0,sizeof(vis));node[i].step = cnt = 0;vis[node[i].x][node[i].y] = 1;Q.push ( node[i] ); while ( ! Q.empty () ){current = Q.front ();Q.pop ();int x = current.x;int y = current.y;if ( map[x][y] != 0 && map[x][y] != -1 ){cnt++;path[i][map[x][y]] = path[map[x][y]][i] = current.step;if ( cnt == Brog ) break;}for ( int j = 0; j < 4; j++ ){x = current.x + dir[j][0];y = current.y + dir[j][1];if ( isOk ( x, y ) ){next.x = x;next.y = y;next.step = current.step + 1;vis[x][y] = 1;Q.push ( next );}}}}}int prim(){int i, j, k, min, sum = 0;int dis[102], mark[102] = { 0 }; for ( i = 1; i <= Brog; i++ )dis[i] = INF;dis[1] = 0;for ( i = 1; i <= Brog; i++ ){min = INF;for ( j = 1; j <= Brog; j++ ){if ( ! mark[j] && dis[j] < min ){k = j;min = dis[j];}}sum += min;mark[k] = 1;for ( j = 1; j <= Brog; j++ ){if ( ! mark[j] && path[k][j] < dis[j] )dis[j] = path[k][j];}}return sum;}int main(){int t;char str[52];cin >> t;while ( t-- ){cin >> col >> row;cin.getline (str,52); /* 输入需要注意 */Brog = 0;memset(node,0,sizeof(node));for ( int i = 0; i < row; i++ ){cin.getline(str, 52, '\n');for ( int j = 0; j < col; j++ ){if ( str[j] == 'A' || str[j] == 'S' ){Brog++;map[i][j] = Brog;node[Brog].x = i;node[Brog].y = j; }else if ( str[j] == ' ' )map[i][j] = 0;else if ( str[j] == '#' )map[i][j] = -1;}}bfs();cout << prim() << endl;}return 0;}
- POJ 3026 Borg Maze BFS+Prim
- POJ 3026--Borg Maze (BFS+Prim)
- poj 3026 Borg Maze (BFS + Prim)
- poj 3026 Borg Maze (bfs+prim)
- 【BFS+Prim】poj 3026 Borg Maze
- POJ 3026:Borg Maze:BFS+prim
- POJ 3026 Borg Maze (BFS+Prim)
- POJ 3026 Borg Maze(BFS+Prim)
- poj 3026 Borg Maze bfs+prim
- POJ 3026 Borg Maze BFS和prim
- POJ 3026 Borg Maze(BFS+prim)
- poj-3026 -Borg Maze -bfs+prim(MST)
- POJ 3026 Borg Maze (prim+bfs)
- poj 3026 Borg Maze(BFS+Prim)
- POJ 3026 Borg Maze (bfs+prim)
- POJ 3026 Borg Maze (bfs+prim)
- poj 3026 Borg Maze(bfs+prim)
- poj 3026 Borg Maze 【prim+bfs】
- NFC三大巨头Blue Bite、Proxama、Tapit结盟共同推动NFC
- c#调用带输出参数的存储过程
- 嵌入式Linux学习2——宿主机Linux相关配置
- android 手动设置 布局高度
- 有个世界注定无法走进
- POJ 3026 Borg Maze BFS+Prim
- 回顾习题5(11-09-08)
- 调用约定(pascal,fastcall,stdcall,thiscall,cdecl)区别等
- 嵌入式Linux学习3——vi文本编译器应用
- BMP文件格式详解(BMP file format)
- 编译器GCC使用
- 计算几何 线段的各种情况 [好题]
- 嵌入式Linux学习5——Shell编程
- NeHe OpenGL教程 第三课 添加颜色