http://poj.org/problem?id=3026
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 18230 | Accepted: 5870 |
Description
Input
Output
Sample Input
2 6 5 ##### #A#A## # # A# #S ## ##### 7 7 ##### #AAA### # A# # S ### # # #AAA### #####
Sample Output
8 11
Source
很坑,数据n,m后面有很长的空格,要用gets读掉
1 #include<iostream> 2 #include<algorithm> 3 #include<queue> 4 #include<cstring> 5 #include<cmath> 6 #include<cstdio> 7 using namespace std; 8 9 struct sair{ 10 int x,y,step; 11 }p[100005]; 12 int fa[100005]; 13 int n,m; 14 15 int Find(int x){ 16 int r=x,y; 17 while(x!=fa[x]){ 18 x=fa[x]; 19 } 20 while(r!=x){ 21 y=fa[r]; 22 fa[r]=x; 23 r=y; 24 } 25 return x; 26 } 27 28 int join(int x,int y){ 29 int xx=Find(x); 30 int yy=Find(y); 31 if(xx!=yy){ 32 fa[xx]=yy; 33 return true; 34 } 35 return false; 36 } 37 38 struct DIST{ 39 int x,y,dis; 40 }dis[1000005]; 41 42 bool cmp(DIST a,DIST b){ 43 return a.dis<b.dis; 44 } 45 46 int dir[4][2]={0,1,1,0,0,-1,-1,0}; 47 int co; 48 49 char mp[505][505]; 50 int book[505][505]; 51 52 void BFS(int x,int y){ 53 queue<sair>Q; 54 memset(book,0,sizeof(book)); 55 sair s,e; 56 s.x=x,s.y=y,s.step=0;; 57 Q.push(s); 58 while(!Q.empty()){ 59 s=Q.front(); 60 Q.pop(); 61 for(int i=0;i<4;i++){ 62 e.x=s.x+dir[i][0]; 63 e.y=s.y+dir[i][1]; 64 if(e.x>=0&&e.x<n&&e.y>=0&&e.y<m&&!book[e.x][e.y]&&mp[e.x][e.y]!=‘#‘){ 65 e.step=s.step+1; 66 Q.push(e); 67 book[e.x][e.y]=1; 68 if(mp[e.x][e.y]==‘A‘||mp[e.x][e.y]==‘S‘){ 69 dis[co].x=x*m+y+1,dis[co].y=e.x*m+e.y+1,dis[co++].dis=e.step; 70 } 71 } 72 } 73 } 74 } 75 76 int main(){ 77 int T; 78 scanf("%d",&T); 79 while(T--){ 80 co=0; 81 char dd[105]; 82 scanf("%d %d",&m,&n); 83 gets(dd); 84 for(int i=0;i<=m*n;i++) fa[i]=i; 85 for(int i=0;i<n;i++) gets(mp[i]); 86 for(int i=0;i<n;i++){ 87 for(int j=0;j<m;j++){ 88 if(mp[i][j]==‘S‘||mp[i][j]==‘A‘){ 89 BFS(i,j); 90 } 91 } 92 } 93 sort(dis,dis+co,cmp); 94 int ans=0; 95 for(int i=0;i<co;i++){ 96 if(join(dis[i].x,dis[i].y)){ 97 ans+=dis[i].dis; 98 } 99 } 100 printf("%d\n",ans); 101 } 102 } 103 /* 104 1 105 50 7 106 ################################################## 107 # AAAAAAA#AAAAAA AAA S # 108 # AAAAAAAAAA AAAAAAAAAAAAAA#####AAAAA### # 109 # A##A#A#A#A###A#A#A#A#A#A#A#A#A#A#A##A#A# # 110 # A ########### 111 # AAAAAAAAAAAA########## # 112 ################################################## 113 */
原文:https://www.cnblogs.com/Fighting-sh/p/9984526.html