FZU 2186 시아오밍의 미로(TSP)

미로를 제시하고 모든 보물을 가져와 원점으로 돌아가 가장 짧은 시간을 구한다.
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
#define B(x) (1<a)a=b; }
void cmin(int& a,int b){ if(b=0)
cmin(dis[a][b],step[now.x][now.y]);
for(int i=0;i<4;i++){
next.x=now.x+d[i][0];
next.y=now.y+d[i][1];
if(next.x>=1&&next.x<=n&&next.y>=1&&next.y<=m){
if(maze[next.x][next.y]>=0&&!mark[next.x][next.y]){
if(step[next.x][next.y]>step[now.x][now.y]+1){
step[next.x][next.y]=step[now.x][now.y]+1;
mark[next.x][next.y]=1;
q[r++]=next;
}
}
}
}
}
}
void Input(){
memset(dp,0x3f,sizeof dp);
memset(dis,0x3f,sizeof dis);
cnt=0;
node[cnt]=Node(1,1);
id[1][1]=cnt++;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
scanf("%d",&maze[i][j]);
if(i==1&&j==1)continue;
if(maze[i][j]>0){
id[i][j]=cnt;
node[cnt]=Node(i,j);
cnt++;
}
else id[i][j]=-1;
}
}
void DP(){
for(int i=0;i

좋은 웹페이지 즐겨찾기