标签:
#include<bits/stdc++.h> using namespace std; char a[105][105]; int mp[105][105]; map<int,int>flag; int mpp[105][105]; int shorpath[6][2]; int dis[4][2]={{1,0},{-1,0},{0,1},{0,-1}}; int n,m; int k; int s_x,s_y; int parent[30]; int jishu=0; int A[6][6]; int re=100000; int sum; struct node { int x; int y; int step; }; int Find(int n) { if(n!=parent[n]) n=Find(parent[n]); return n; } void unio( int ss,int bb) { ss=Find(ss); bb=Find(bb); if(ss!=bb) parent[ss]=bb; } queue<node>q; node N,now; void init_() { for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) mpp[i][j]=mp[i][j]; } int bfs(int a,int b,int c,int d) { init_(); while(!q.empty()) { q.pop(); } N.x=a; N.y=b; N.step=0; q.push(N); mpp[a][b]=0; while(!q.empty()) { now=q.front(); q.pop(); if(now.x==c&&now.y==d) return now.step; for(int i=0;i<4;i++) { int aa=now.x+dis[i][0]; int bb=now.y+dis[i][1]; if(aa>0&&aa<=n&&bb>0&&bb<=m&&mpp[aa][bb]) { mpp[aa][bb]=0; N.x=aa; N.y=bb; N.step=now.step+1; q.push(N); } } } return -1; } void init() { for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) mp[i][j]=0; for(int i=0;i<=30;i++) parent[i]=i; re=100000; } /*void kruskal() { int re=0; for(int i=0;i<jishu;i++) { int qq=A[i].s; int ww=A[i].e; //cout<<re<<endl; if(Find(qq)!=Find(ww)) { unio(qq,ww); re+=A[i].x; } } printf("%d\n",re); }*/ void dfs(int n,int ce) { if(ce==k) { if(sum<re) { re=sum; } //printf("%d\n",re); return ; } for(int i=0;i<=k;i++) { if(i!=n&&flag[i]==0) { sum+=A[n][i]; flag[i]=1; dfs(i,ce+1); sum-=A[n][i]; flag[i]=0; } } } int main() { while(scanf("%d%d",&n,&m)!=EOF) { if(n==0&&m==0) break; init(); getchar(); for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { scanf("%c",&a[i][j]); if(a[i][j]==‘@‘) { s_x=i; s_y=j; } if(a[i][j]==‘.‘||a[i][j]==‘@‘) mp[i][j]=1; } getchar(); } scanf("%d",&k); shorpath[0][0]=s_x; shorpath[0][1]=s_y; for(int i=1;i<=k;i++) scanf("%d%d",&shorpath[i][0],&shorpath[i][1]); jishu=0; for(int i=0;i<=k;i++) for(int j=0;j<=k;j++) { A[i][j]=bfs(shorpath[i][0],shorpath[i][1],shorpath[j][0],shorpath[j][1]); } sum=0; flag[0]=1; dfs(0,0); printf("%d\n",re); } return 0; }
标签:
原文地址:http://www.cnblogs.com/hsd-/p/4915986.html