| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
妈的,鬼知道怎么会是WA!!!#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
#define INF 10000000
struct point
{
int px,py;
int d;
} points[102];
int x,y,num;//input y行x列 aliens'num
//****BFS*****
char map[52][52];//储存迷宫地图
int visit[52][52];
queue<point> q;//BFS
int flag[552];
int direct[4][2] = {{1,0},{0,1},{-1,0},{0,-1}};
//*****Prim*****
int edges[102][102];//记录edges[i]记录i到其他所有点的距离
int values[102];//Prim中点权重记录
void input()
{
num = 0;
for(int i = 0;i < y;i++)
{
gets(map[i]);
for(int j = 0;j < x;j++)
if(map[i][j] == 'A' || map[i][j]=='S')
{
points[num].px = i;
points[num].py = j;
points[num].d = 0;
flag[i*10+j] = num;
values[num] = INF;
if(map[i][j] == 'S') values[num] = 0;
num++;
}
}
}
void BFS(int u)
{
point t;int time = 0;
q.push(points[u]);
while(!q.empty())
{
point p = q.front();
q.pop();
//判断是否为A或者S
if(map[p.px][p.py] == 'A' || map[p.px][p.py]=='S')
{
edges[u][flag[p.px*10+p.py]] = p.d;
time++;
}
visit[p.px][p.py] = 1;
//将合法的四个方向压入q
for(int i = 0;i < 4;i++)
{
int xx = p.px + direct[i][0];
int yy = p.py + direct[i][1];
if(map[xx][yy] != '#' && !visit[xx][yy])
{
visit[xx][yy] = 1; //这句话导致了TLE
t.px = xx;
t.py = yy;
t.d = p.d+1;
q.push(t);
}
}
}
}
void countEdges()
{
for(int i = 0; i < num;i++)
{
memset(visit , 0 ,sizeof(visit));
BFS(i);
}
}
int MST_Prim()
{
int sum = 0;
for(int k = 0;k < num;k++)
{
int index = -1;int min = INF;
for(int i = 0;i < num;i++)
if(values[i] >= 0 && min > values[i])
{
min = values[i];
index = i;
}
values[index] = -1;
sum += min;
for(int i = 0;i < num;i++)
if(values[i] >= 0 && edges[index][i] < values[i])
values[i] = edges[index][i];
}
return sum;
}
int main()
{
int T = 0;char c[51];
cin >> T;
while(T--)
{
cin >> x >> y;
gets(c);
input();
countEdges();
cout<<MST_Prim()<<endl;
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator