标签:blog io ar os sp for on 2014 log
题目大意:
地图上有最多4件物品,小偷要全部拿走,问最少的路程。
思路分析:
考虑到物品数量只有4。
可以先用最多5次bfs求出每个目标点到其他目标点的距离。
然后枚举依次拿取物品的顺序,用next_permutation...
#include <cstdio> #include <iostream> #include <cstring> #include <algorithm> #include <queue> using namespace std; char mp[105][105]; struct node { int x,y,step; }; int dis[5][5]; int dx[] = {0,0,-1,1}; int dy[] = {-1,1,0,0}; int n,m; bool ok(node t) { if(t.x >= 0 && t.x < n && t.y>=0 && t.y < m)return true; return false; } bool vis[105][105]; void bfs(node st,int id) { queue<node>Q; memset(vis,false,sizeof vis); vis[st.x][st.y]=true; node w,e; Q.push(st); while(!Q.empty()) { w=Q.front(); Q.pop(); for(int d=0;d<4;d++) { e=w; e.x+=dx[d]; e.y+=dy[d]; e.step++; if(ok(e) && !vis[e.x][e.y] && mp[e.x][e.y]!='#') { if(mp[e.x][e.y]=='0' || mp[e.x][e.y]=='1' || mp[e.x][e.y]=='2' || mp[e.x][e.y]=='3' || mp[e.x][e.y]=='4') { dis[id][mp[e.x][e.y]-'0'] = min(e.step,dis[id][mp[e.x][e.y]-'0']); dis[mp[e.x][e.y]-'0'][id] = min(e.step,dis[mp[e.x][e.y]-'0'][id]); } vis[e.x][e.y]=true; Q.push(e); } } } } int main() { while(scanf("%d%d",&n,&m)!=EOF) { if(n==0 && m==0)break; node init; for(int i=0;i<n;i++) scanf("%s",mp[i]); for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { if(mp[i][j]=='@') { init.x=i; init.y=j; init.step=0; mp[i][j]='0'; } } } int test; bool can=true; scanf("%d",&test); for(int i=1;i<=test;i++) { int x,y; scanf("%d%d",&x,&y); mp[x-1][y-1]=i+'0'; } memset(dis,0x3f,sizeof dis); for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { if(mp[i][j]=='0' || mp[i][j]=='1' || mp[i][j] == '2' || mp[i][j]=='3' || mp[i][j]=='4') { node st; st.x=i,st.y=j; st.step=0; bfs(st,mp[i][j]-'0'); } } } for(int i=0;i<test+1;i++)dis[i][i]=0; int per[4]; for(int i=1;i<=test;i++) { per[i]=i; } int ans=0x3f3f3f3f; per[0]=0; do { int tans=0; for(int i=1;i<=test;i++) { tans+=dis[per[i-1]][per[i]]; } ans=min(tans,ans); }while(next_permutation(per+1,per+1+test)); if(ans!=0x3f3f3f3f)printf("%d\n",ans); else printf("-1\n"); } return 0; } /* 4 4 #@## .... #### .... 2 2 1 2 4 */
Hdu 4771 Stealing Harry Potter's Precious (搜索)
标签:blog io ar os sp for on 2014 log
原文地址:http://blog.csdn.net/u010709592/article/details/41321601