00001 #include <iostream> 00002 #include <vector> 00003 00004 int n = 100; 00005 00006 int getLine(int index) 00007 { 00008 index = index % (2*n); 00009 00010 if (index >= n) 00011 return 2*n - 1 - 2*(index - n); 00012 else 00013 return 2*index; 00014 } 00015 00016 int getIndex(int line) 00017 { 00018 if (line % 2 == 0) 00019 return line / 2; 00020 else 00021 return 2*n - 1 - (line/2); 00022 } 00023 00024 int main() 00025 { 00026 n = 5; 00027 00028 int store; 00029 std::vector<int> lines; 00030 std::vector<bool> done; 00031 00032 lines.resize(2*n); 00033 done.resize(2*n); 00034 00035 for (int t = 0; t <= n; t++) { 00036 for (int i = 0; i < 2*n; i++) { 00037 lines[i] = i; 00038 done[i] = false; 00039 } 00040 00041 for (int i = 0; i < 2*n; i++) { 00042 if (done[i]) continue; 00043 00044 int j = i; 00045 store = lines[j]; 00046 while (!done[j]) { 00047 done[j] = true; 00048 int newj = getLine(getIndex(j) + t); 00049 if (done[newj]) 00050 lines[j] = store; 00051 else 00052 lines[j] = lines[newj]; 00053 j = newj; 00054 } 00055 } 00056 00057 for (int i = 0; i < 2*n; i++) 00058 std::cout << lines[i] << " "; 00059 std::cout << std::endl; 00060 } 00061 return 0; 00062 }