标签: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