POJ 3026 广搜+最小生成树
来源:互联网 发布:linux ssh开启 编辑:程序博客网 时间:2024/05/20 13:18
这道题目真是太麻烦了,设置了好多变量。对了,还参考了discuss中的空格的问题。
//11333524c00h00g3026Accepted680K47MSG++2894B2013-03-10 14:35:03#include<stdio.h>#include<stdlib.h>#include<queue>#include<string.h>using namespace std;#define INF 0x7fffffff//字符矩阵 char mat[55][55];int x,y,n,k;struct Node{ int x,y;};//A之间的距离 int dist[102][102];//广搜过程中记录点是否访问过 int vis[55][55];//方向数组 int dir[4][2]={{0,1},{-1,0},{0,-1},{1,0}};//记录某个位置对应node节点的下标 int index[55][55]; //广搜的过程中记录距离int dd[55][55];//记录距离lowcostint lowcost[102];int visited[102];queue<Node> q;void bfs(Node nd){ q.push(nd); memset(vis,0,sizeof(vis)); dd[nd.x][nd.y]=0; vis[nd.x][nd.y]=1; while(!q.empty()){ Node tmp=q.front();q.pop(); for(int i=0;i<4;i++){ int xx=tmp.x+dir[i][0]; int yy=tmp.y+dir[i][1]; if(xx>=0&&xx<y&&yy>=0&&yy<x&&(mat[xx][yy]=='A'||mat[xx][yy]==' '||mat[xx][yy]=='S')&&vis[xx][yy]==0){ dd[xx][yy]=dd[tmp.x][tmp.y]+1; vis[xx][yy]=1; if(mat[xx][yy]=='A'||mat[xx][yy]=='S'){ dist[index[nd.x][nd.y]][index[xx][yy]]=dd[xx][yy]; dist[index[xx][yy]][index[nd.x][nd.y]]=dd[xx][yy]; } Node ne;ne.x=xx;ne.y=yy; q.push(ne); } } }}//起点设置为0 int prim(){ int res=0,Min; memset(visited,0,sizeof(visited)); visited[0]=1; for(int i=1;i<k;i++) lowcost[i]=dist[0][i]; int v; for(int i=1;i<k;i++){ Min=INF; for(int j=1;j<k;j++) if(lowcost[j]<Min&&!visited[j]){ Min=lowcost[j]; v=j; } res+=Min; visited[v]=1; for(int j=1;j<k;j++) if(lowcost[j]>dist[v][j]&&!visited[j]) lowcost[j]=dist[v][j]; } return res;}int main(){ char aa[100]; while(scanf("%d",&n)!=EOF){ while(n--){ k=0; scanf("%d%d",&x,&y);gets(aa); for(int i=0;i<y;i++){ for(int j=0;j<x;j++){ scanf("%c",&mat[i][j]); if(mat[i][j]=='A'||mat[i][j]=='S'){ index[i][j]=k; k++; } } getchar(); } /*for(int i=0;i<y;i++){ for(int j=0;j<x;j++) printf("%c",mat[i][j]); printf("\n"); }*/ for(int i=0;i<k;i++) for(int j=0;j<k;j++) dist[i][j]=((i==j)?0:INF); //开始bfs for(int i=0;i<y;i++) for(int j=0;j<x;j++) if(mat[i][j]=='A'||mat[i][j]=='S'){ Node tmp;tmp.x=i;tmp.y=j; bfs(tmp); } printf("%d\n",prim()); } } //system("pause"); return 0;}
- POJ 3026 广搜+最小生成树
- poj 3026 Borg Maze 最小生成树 + 广搜
- poj3026Borg Maze_最小生成树(广搜+prim算法)
- poj 3026 (最小生成树)
- poj 3026 最小生成树
- poj 3026(BFS+最小生成树)
- POJ 3026 bfs+最小生成树
- poj-3026—bfs+最小生成树
- POJ 3026 (BFS+最小生成树)
- poj 3026 Borg Maze 最小生成树
- poj-3026-Borg Maze-最小生成树
- POJ 3026 Borg Maze 最小生成树
- POJ 3026(BFS+最小生成树)
- poj 3026 Borg Maze(最小生成树)
- poj 最小生成树1258
- POJ 1258 最小生成树
- 最小生成树 poj 2485
- POJ-1258 最小生成树
- FFT算法MATLAB实现与测试
- 软件项目管理系统-账务管理-项目收款
- 有了接口,微信什么都能做
- Windows下mysql忘记root密码解决方法
- Rails3程序在产品模式下出现assert文件404错误的问题
- POJ 3026 广搜+最小生成树
- JSP/Servlet:tomcat深入内部结构描述
- UltraISO 写入 U 盘安装 Ubuntu
- WordPress提交评论后自动跳转到“Thank you” 页面
- [Leetcode] Maximum Subarrary
- 你中招了吗?iOS应用泄露隐私比安卓严重
- Android Custom Dialog错误Unable to add window -- token null is not for an application
- srm144div2P200简单题
- 互联网传统进入要交的学费-怎么样才能成功