poj 3026 BFS+Prim 为啥Runtime Error ?

Ocean藏心 2013-07-22 07:55:54
http://poj.org/problem?id=3026



#include<stdio.h>
#include<string.h>
#define INF 2501
/*用简洁的代码 来解决问题 拒绝脏乱差..不断提高中....*/

int N; //记录测试次数
int map_w,map_h; //对应每组测试前两个数字相当于j和i

char map[51][51]; //用来读输入
int dir4[4][2]={
0,-1,1,0,0,1,-1,0
};
int newmap[51][51]; //用BFS在其之上构造新图 Prim算法运行在新图之上
struct VNODE{
int x,y;
};

VNODE vertex[2501];
int nvex;

VNODE queue[2501];
int head=0;
int tail=0;

bool vis[51][51];
int t[51][51];

int BFS2(VNODE s,VNODE e){

memset(t,0,sizeof(t));
memset(vis,false,sizeof(vis));
vis[s.x][s.y]=true;
head=tail =0;
queue[tail++]=s;

while(head!=tail){
VNODE u,v;

u = queue[head++];

for(int i=0;i<4;i++){


v.x=u.x+dir4[i][0];
v.y=u.y+dir4[i][1];

if(vis[v.x][v.y]||map[v.x][v.y]=='#')continue;

queue[tail++]=v;
t[v.x][v.y]=t[u.x][u.y]+1;

if(v.x==e.x&&v.y==e.y){

return t[v.x][v.y];
}
vis[u.x][u.y]=true;
}

}
return 0;
}

int Prim(int nvex){
int lowcost[51];
int closest[51];
int flag=0,e=0,min_cost=0,max_cost=0;
int num=0;


memset(closest,false,sizeof(closest));
closest[e]=true ;
for(int i=0;i<nvex;i++){
lowcost[i]=INF;
}

while(++num < nvex)
{
min_cost=INF;
for(int i=1;i<nvex;i++)
if(!closest[i]){

if(newmap[e][i]<lowcost[i])
lowcost[i]=newmap[e][i];
if(min_cost>lowcost[i])
min_cost=lowcost[flag = i];
}
closest[e = flag]=true;
max_cost+=min_cost;
}
return max_cost;

}

int main(){
scanf("%d",&N);
while(N--){
// 读取矩阵 并转置成地图
scanf("%d %d",&map_w,&map_h);
getchar();
nvex=0;
for(int y=0;y<map_h;y++) //y相当于i
{
gets(map[y]);
for(int i=0;i<map_w;i++)
if(map[y][i]!=' '&&map[y][i]!='#')
{
vertex[nvex].x=y; //由于图是按行存储的 所以x,y与i,j
vertex[nvex].y=i; //含义相同
nvex++; //PS:本来我是按列存储的
}
}


for(int i=0;i<nvex;i++){
for(int j=i+1;j<nvex;j++){

newmap[i][j]=newmap[j][i] = BFS2(vertex[i],vertex[j]);
}
}

for(int i=0;i<nvex;i++){
newmap[i][i]=0;
}
printf("%d\n",Prim(nvex));

}
}





改过好多地方之后的样子.
是开的东西太多
还是递归循环太深
还是算法细节问题
....


Sample Input

2
6 5
#####
#A#A##
# # A#
#S ##
#####
7 7
#####
#AAA###
# A#
# S ###
# #
#AAA###
#####

Sample Output

8
11

测试数据都对
...全文
88 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧