| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
爽!C++TLE,G++AC 740ms (bfs+next_permutation()) 附代码#include<algorithm>
#include<iostream>
#include<cstring>
#include<vector>
#include<queue>
#pragma GCC diagnostic error "-std=c++11"
#define ll long long
#define mp make_pair
using namespace std;
vector<pair<int,int> >v;
char c[22][22];
int bx,by,n,m;
int dist[11][11];
int td[22][22];
int dx[]={1,0,-1,0};
int dy[]={0,1,0,-1};
inline int bfs(pair<int,int> a,pair<int,int> b){
queue<pair<pair<int,int>,int> >q;
pair<pair<int,int>,int> p;
memset(td,63,sizeof(td));
td[a.first][a.second]=0;
q.push(mp(a,0));
while(!q.empty()){
p=q.front();
q.pop();
if(p.first==b) return p.second;
int x=p.first.first,y=p.first.second;
for(int i=0;i<4;++i){
int tx=x+dx[i],ty=y+dy[i];
if(tx<0 or tx==n or ty<0 or ty==m) continue;
if(td[tx][ty]<=p.second+1 or c[tx][ty]=='x') continue;
td[tx][ty]=p.second+1;
q.push(mp(mp(tx,ty),td[tx][ty]));
}
}
return 2147483647;
}
int nxt[12];
inline void solve(){
v.clear();
for(int i=0;i<n;++i) for(int j=0;j<m;++j){
cin>>c[i][j];
if(c[i][j]=='o') bx=i,by=j;
else if(c[i][j]=='*') v.push_back(mp(i,j));
}
v.insert(v.begin(),mp(bx,by));
for(int i=0;i<v.size();++i) for(int j=i+1;j<v.size();++j){
dist[i][j]=dist[j][i]=bfs(v[i],v[j]);
if(dist[i][j]==2147483647){
cout<<-1<<endl;
return;
}
}
// for(int i=0;i<v.size();++i){
// for(int j=i+1;j<v.size();++j) cout<<i<<' '<<j<<" : "<<dist[i][j]<<endl;
// }
// cout<<endl;
for(int i=1;i<v.size();++i) nxt[i]=i;
int mn=2147483647;
do{
int cnt=0;
for(int i=1;i<v.size();++i) cnt+=dist[nxt[i-1]][nxt[i]];
mn=min(mn,cnt);
// for(int i=0;i<v.size();++i) cout<<nxt[i]<<' ';
// cout<<endl<<cnt<<endl;
}while(next_permutation(nxt+1,nxt+v.size()));
cout<<mn<<endl;
}
int main(){
ios_base::sync_with_stdio(false);
int i,j;
while(cin>>m>>n){
if(n and m) solve();
else break;
}
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator