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 |
状压BFS,时隔两个半月,二刷1A留念#include<cstdio> #include<cstring> #include<algorithm> #include<queue> using namespace std; const int oo = 0x3f3f3f3f; int W, H; int field[20][20]; int sx, sy, ss; int L, N; int dx[] = {1, 0, -1, 0}; int dy[] = {0, -1, 0, 1}; int dist[20][20][1 << 14]; struct P{ int x, y, s; }; bool Judge(int nx, int ny, int x, int y, int s){ if(nx < 0 || nx >= H || ny <0 || ny >= W || field[nx][ny] == 1){ return false; } for(int i = 0; i < L - 1; i ++){ int mv = (s >> (2 * i)) & 3; x = x + dx[mv]; y = y + dy[mv]; if(nx == x && ny == y){ return false; } } return true; } int bfs(){ memset(dist, oo, sizeof(dist)); dist[sx][sy][ss] = 0; queue<P> que; que.push((P){sx, sy, ss}); while(!que.empty()){ P p = que.front(); que.pop(); if(p.x == 0 && p.y == 0){ return dist[p.x][p.y][p.s]; } for(int i =0; i < 4; i ++){ int nx = p.x + dx[i]; int ny = p.y + dy[i]; int ns = p.s; if(Judge(nx, ny, p.x, p.y, p.s)){ ns = (ns << 2) + (i + 2) % 4; ns &= (1 << ((L - 1) * 2)) - 1; if(dist[nx][ny][ns] > dist[p.x][p.y][p.s] + 1){ dist[nx][ny][ns] = dist[p.x][p.y][p.s] + 1; que.push((P){nx, ny, ns}); } } } } return -1; } int main(){ int c = 0; while(true){ scanf("%d %d %d", &H, &W, &L); if(H == 0 && W == 0 && L == 0){ break; } memset(field, 0, sizeof(field)); pair<int, int> arr[8]; for(int i = 0; i < L; i ++){ scanf("%d %d", &arr[i].first, &arr[i].second); arr[i].first --; arr[i].second --; } sx = arr[0].first; sy = arr[0].second; ss = 0; for(int i = L - 1; i > 0; i --){ ss <<= 2; if(arr[i].second == arr[i - 1].second){ if(arr[i].first == arr[i - 1].first + 1){ ss += 0; } else { ss += 2; } } else { if(arr[i].second == arr[i - 1].second - 1){ ss += 1; } else { ss += 3; } } } scanf("%d", &N); int a, b; for(int i =0; i < N; i ++){ scanf("%d %d", &a, &b); field[a - 1][b - 1] = 1; } printf("Case %d: %d\n", ++c, bfs()); } } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator