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 |
final题目就是final题目啊,3个小时,头昏眼花腿抽筋,犯了N个低级错误,贴代码庆祝下~Source Code Problem: 1872 User: yzhw Memory: 688K Time: 32MS Language: G++ Result: Accepted Source Code # include <iostream> # include <cstdio> # include <cstring> using namespace std; int map[11][11]; int next[6][6][5]; bool used[20000]; void init_next(int f,int u,int d,int l,int r,int extra) { next[f][d][0]=u; next[f][d][1]=d; next[f][d][2]=l; next[f][d][3]=r; next[f][r][0]=l; next[f][r][1]=r; next[f][r][2]=d; next[f][r][3]=u; next[f][u][0]=d; next[f][u][1]=u; next[f][u][2]=r; next[f][u][3]=l; next[f][l][0]=r; next[f][l][1]=l; next[f][l][2]=u; next[f][l][3]=d; next[f][l][4]=next[f][r][4]=next[f][u][4]=next[f][d][4]=extra; } void decode(int code,int &r,int &c,int &now,int &front) { front=(code&7); code>>=3; now=code&7; code>>=3; c=code&15; code>>=4; r=code&15; } int encode(int r,int c,int now,int front) { int code=r; code<<=4; code|=c; code<<=3; code|=now; code<<=3; code|=front; return code; } int row,col,sr,sc; int refer[20000][2],res=0xfffffff,trefer[20000][2]; void dfs(int level,int code) { int r,c,now,front; decode(code,r,c,now,front); if(r==sr&&c==sc&&level>1) { if(level<res) { res=level; trefer[level][0]=r; trefer[level][1]=c; for(int i=0;i<=level;i++) refer[i][0]=trefer[i][0],refer[i][1]=trefer[i][1]; } return; } if(used[code]) return; if(level>res) return; //printf("level=%d r=%d c=%d now=%d front=%d\n",level,r,c,now+1,front+1); //system("pause"); trefer[level][0]=r,trefer[level][1]=c; used[code]=1; if(r>1&&(map[r-1][c]==-1||map[r-1][c]==now+1)) dfs(level+1,encode(r-1,c,next[now][front][1],next[now][front][4])); if(r<row&&(map[r+1][c]==-1||map[r+1][c]==now+1)) dfs(level+1,encode(r+1,c,next[now][front][0],now)); if(c>1&&(map[r][c-1]==-1||map[r][c-1]==now+1)) dfs(level+1,encode(r,c-1,next[now][front][3],front)); if(c<col&&(map[r][c+1]==-1||map[r][c+1]==now+1)) dfs(level+1,encode(r,c+1,next[now][front][2],front)); used[code]=0; } int main() { init_next(0,2,3,4,1,5); init_next(1,2,3,0,5,4); init_next(2,0,5,1,4,3); init_next(3,5,0,1,4,2); init_next(4,2,3,5,0,1); init_next(5,2,3,1,4,0); while(true) { char name[30]; int now,front; scanf("%s",name); if(!strcmp(name,"END")) break; scanf("%d %d %d %d %d %d",&row,&col,&sr,&sc,&now,&front); // memset(map,0,sizeof(map)); for(int i=1;i<=row;i++) for(int j=1;j<=col;j++) scanf("%d",&map[i][j]); memset(used,0,sizeof(used)); res=0xfffffff; dfs(0,encode(sr,sc,now-1,front-1)); printf("%s\n",name); if(res==0xfffffff) printf(" No Solution Possible\n"); else { printf(" "); for(int i=0;i<=res;i++) { if(i==res) printf("(%d,%d)\n",refer[i][0],refer[i][1]); else printf("(%d,%d),",refer[i][0],refer[i][1]); if(i%9==8&&i!=res) printf("\n "); } } } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator