?? 1008.cpp
字號:
#include <iostream>#include <string>#include <stdlib.h>#include <queue>#include <vector>using namespace std;const int maxN = 10;bool map[maxN+2][maxN+2];int x1,y1;int dir[4][2] ={ 1,0, 0,1, -1,0, 0, -1 };string direct = "RTLB";vector<string> input2; int stat = 0;struct point{ int x, y;};int str2num( string a ){ int s = 0; for( int i = 0; i < a.length(); i++ ) {s *= 10; s+=a[i]-'0';} return s;}void readIn(){ string str1,str2; int i,x,y; memset( map,0,sizeof(map) ); getline(cin , str1); cin >> str2; if( str2[0] <'0' || str2[0] > '9' )stat = 2; else stat = 1; if( stat == 1 ) { int n = str2num(str1); x1 = str2num(str2); cin >> y1; map[x1][y1] = true; for( i = 1 ; i < n ; i++ ) { cin >> x >> y; map[x][y] = true; } return; } if( stat == 2 ) { for( i = 0 ; i < str1.length() ; i++) { if (str1[i]==' '){ x1 = str2num( str1.substr(0,i) ); y1 = str2num( str1.substr(i+1, str1.length() - i-1 ) ); break; } } input2.push_back(str2); string temp; while (cin >> temp){ input2.push_back(temp); } return; }}void work1(){ int i, x, y; queue<point> pq; vector<string> ans1; point p1; p1.x = x1, p1.y = y1; point p; pq.push(p1); map[p1.x][p1.y] = false; while( !pq.empty() ) { p = pq.front(); pq.pop(); string dirnow; for( i = 0 ; i < 4 ; i++ ) { point p2; p2.x = p.x+dir[i][0]; p2.y = p.y+dir[i][1]; if( map[p2.x][p2.y] ) { dirnow.append(1,direct[i]); pq.push(p2); map[p2.x][p2.y] = false; } } ans1.push_back(dirnow); } cout << p1.x << ' ' << p1.y << endl; for( i = 0 ; i < ans1.size() - 1 ; i++ ) cout << ans1[i] << ',' << endl; cout <<'.' << endl;}int min(int a, int b){return a < b ? a: b;}void work2(){ int i , j , r = 0; queue<point> pq; int n = input2.size(); point p,p1; p1.x = x1, p1.y = y1; map[p1.x][p1.y] = true; pq.push(p1); while( !pq.empty() ) { p = pq.front(); pq.pop(); point p2; for( i = 0; i < 4 ;i++) { if(input2[r][i] == 'R'){ p2.x = p.x + dir[0][0], p2.y = p.y + dir[0][1]; } if(input2[r][i] == 'T'){ p2.x = p.x + dir[1][0], p2.y = p.y + dir[1][1]; } if(input2[r][i] == 'L'){ p2.x = p.x + dir[2][0], p2.y = p.y + dir[2][1]; } if(input2[r][i] == 'B'){ p2.x = p.x + dir[3][0], p2.y = p.y + dir[3][1]; } if(input2[r][i] == ','|| input2[r][i] == '.') break; pq.push(p2); map[p2.x][p2.y] = true; } r++; } cout << n << endl; for( i = 1 ; i <= maxN ; i++ ) for ( j = 1; j <= maxN ; j++ ) if( map[i][j] )cout << i << ' ' << j << endl; return;}int main(){ //freopen("1008.in","r",stdin); readIn(); if( stat == 1 )work1(); else work2(); return 0;}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -