没看题,直接看了样例,大概意思就是给了一张迷宫吧,要把所有的A和S全部链接起来需要的最小边权...就是求最小生成树....but...,边的顶点和距离完全要自己解决...顶点编号直接从在图上跑了一遍给编了序号1-k,代表第几个点,-1代表墙,0代表可走的地方,对每个点进行一次bfs,并且在bfs过程中建立这个点对其他点的边..最后跑完最小生成树就行了.
不得不说调试了好久...以为是bfs写搓了,原来是初始化被我一直忘记了.....专题六已经完结...撒花庆祝
PS:注意输入m n后getchar吃掉换行貌似会错,因为我调试的时候发现那个输入有错...就直接用了gets,可能是因为mn后有空格?
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<queue>
#include<algorithm>
#include<iostream>
using namespace std;
int map[60][60];
int used[60][60],n,m,p;
int f[2000];
struct node
{
int x,y,t;
}e[20000];
int cmp(node a,node b)
{
return a.t<b.t;
}
void inti()
{
for(int i=1;i<=300;i++)
f[i]=i;
}
int find(int x)
{
if(x!=f[x])
return f[x]=find(f[x]);
return x;
}
int d[4][2]={1,0,-1,0,0,-1,