UVa 101: The Blocks Problem
2017-01-08 14:54
447 查看
#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <vector> #include <string> #define OPEN_DEBUG 1 using namespace std; int main() { int n; const string quit_flag = "quit"; const string ope_move = "move"; const string ope_pile = "pile"; const string ope_onto = "onto"; const string ope_over = "over"; while(cin >> n) { int *trace_block = new int ; vector<int> *blocks = new vector<int> ; string ope_command; string ope_type, ope_pos; int a, b; for(int i = 0; i < n; i++) { blocks[i].push_back(i); trace_block[i] = i; } while((cin >> ope_type) && !(ope_type == quit_flag)) { cin >> a >> ope_pos >> b; if(ope_type != ope_move && ope_type != ope_pile) continue; if(ope_pos != ope_onto && ope_pos != ope_over) continue; if(a < 0 || a >= n || b < 0 || b >= n) continue; int trace_block_a = trace_block[a]; int trace_block_b = trace_block[b]; int size_a = blocks[trace_block_a].size() - 1; int size_b = blocks[trace_block_b].size() - 1; if (trace_block_a == trace_block_b) continue; if(ope_type == ope_move) { if(ope_pos == ope_onto) { while(blocks[trace_block_a][size_a] != a) { int pop_in_stack_a = blocks[trace_block_a][size_a]; blocks[pop_in_stack_a].push_back(pop_in_stack_a); trace_block[pop_in_stack_a] = pop_in_stack_a; blocks[trace_block_a].pop_back(); size_a--; } while(blocks[trace_block_b][size_b] != b) { int pop_in_stack_b = blocks[trace_block_b][size_b]; blocks[pop_in_stack_b].push_back(pop_in_stack_b); trace_block[pop_in_stack_b] = pop_in_stack_b; blocks[trace_block_b].pop_back(); size_b--; } trace_block[a] = trace_block[b]; blocks[trace_block_a].pop_back(); blocks[trace_block_b].push_back(a); } else { while(blocks[trace_block_a][size_a] != a) { int pop_in_stack_a = blocks[trace_block_a][size_a]; blocks[pop_in_stack_a].push_back(pop_in_stack_a); trace_block[pop_in_stack_a] = pop_in_stack_a; blocks[trace_block_a].pop_back(); size_a--; } trace_block[a] = trace_block[b]; blocks[trace_block_a].pop_back(); blocks[trace_block_b].push_back(a); } } else { if(ope_pos == ope_onto) { while(blocks[trace_block_b][size_b] != b) { int pop_in_stack_b = blocks[trace_block_b][size_b]; blocks[pop_in_stack_b].push_back(pop_in_stack_b); trace_block[pop_in_stack_b] = pop_in_stack_b; blocks[trace_block_b].pop_back(); size_b--; } int track_flag = 0; int start_num = 0; for(int it = 0; it <= size_a; it++) { int tmp = blocks[trace_block_a][it]; if(tmp == a) { track_flag = 1; start_num = it; } if(track_flag == 1) { blocks[trace_block_b].push_back(tmp); trace_block[tmp] = trace_block_b; } } #if(OPEN_DEBUG == 1) cout << "Onto runs here" << endl; #endif blocks[trace_block_a].erase(blocks[trace_block_a].begin()+start_num, blocks[trace_block_a].begin() + size_a + 1); } else { int track_flag = 0; int start_num = 0; #if(OPEN_DEBUG == 1) cout << a << "is" << size_a << endl; #endif for(int it = 0; it <= size_a; it++) { int tmp = blocks[trace_block_a][it]; #if(OPEN_DEBUG == 1) cout << it << " " << tmp << endl; #endif if(tmp == a) { track_flag = 1; start_num = it; } if(track_flag == 1) { blocks[trace_block_b].push_back(tmp); trace_block[tmp] = trace_block_b; } } blocks[trace_block_a].erase(blocks[trace_block_a].begin()+start_num, blocks[trace_block_a].begin() + size_a + 1); } } #if(OPEN_DEBUG == 1) for (int i = 0; i < n; i++) { cout << i << ":"; for (vector<int>::iterator it = blocks[i].begin(); it != blocks[i].end(); ++it) { cout << " " << *it; } cout << " trace" << trace_block[i] << endl; } #endif } for(int i = 0; i < n; i++) { cout << i << ":"; for(vector<int>::iterator it = blocks[i].begin() ; it != blocks[i].end(); ++it) { cout << " " << *it; } cout << endl; } //for(int i = 0; i < n; i++) // delete blocks[i]; delete []blocks; delete trace_block; } return 0; }
相关文章推荐
- UVA - 101 The Blocks Problem
- uva 101 The Blocks Problem
- uva 101 - The Blocks Problem
- uva 101 The Blocks Problem(模拟)
- uva 101 - The Blocks Problem
- UVa 101 - The Blocks Problem
- uva101 - The Blocks Problem
- UVa101-The Blocks Problem/STL-Vector的使用
- UVa OJ The Blocks Problem 木块问题 101
- 《算法竞赛入门经典2ndEdition 》例题5-2 木块问题(The Blocks Problem, Uva101)
- 经典第五章例5.2 UVA 101 The Blocks Problem(vector的基础应用)
- UVA - 101 The Blocks Problem
- UVA 101 - The Blocks Problem(模拟)
- UVA 101(p110)----The Blocks Problem
- UVa 101 The Blocks Problem (超级模拟)
- 木块问题(The Blocks Problem, UVa 101)
- UVa 101 - The Blocks Problem
- UVa 101-The Blocks Problem
- uva 101 The Blocks Problem -----list线性表
- uva101木块问题The Blocks Problem