|
|
|
|
#include <bits/stdc++.h>
|
|
|
|
|
|
|
|
|
|
using namespace std;
|
|
|
|
|
//*************************************************************************
|
|
|
|
|
/*
|
|
|
|
|
˼·<EFBFBD><EFBFBD>
|
|
|
|
|
<EFBFBD><EFBFBD>1<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>Ե<EFBFBD><EFBFBD>Ҫת<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Խ<EFBFBD>磬<EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>0
|
|
|
|
|
<EFBFBD><EFBFBD>2<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD>Ҫ<EFBFBD>ߵ<EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD>߹<EFBFBD><EFBFBD>ˣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫת<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD>ɺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڿ<EFBFBD><EFBFBD><EFBFBD>x,y<EFBFBD>ļӼӼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
<EFBFBD><EFBFBD>3<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵλ<EFBFBD>û<EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><EFBFBD>
|
|
|
|
|
*/
|
|
|
|
|
// <20>ϣ<EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3<EFBFBD><33><EFBFBD>ң<EFBFBD>4
|
|
|
|
|
const int UP = 1, DOWN = 2, LEFT = 3, RIGHT = 4;
|
|
|
|
|
//˳ʱ<CBB3><CAB1>
|
|
|
|
|
int dirSun[4] = {RIGHT, DOWN, LEFT, UP};
|
|
|
|
|
//<2F><>ʱ<EFBFBD><CAB1>
|
|
|
|
|
int dirNi[4] = {RIGHT, UP, LEFT, DOWN};
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
int a[10][10] = {0};
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ8*8
|
|
|
|
|
int n = 4;
|
|
|
|
|
//<2F><>ʼ<EFBFBD><CABC>
|
|
|
|
|
int x = 0, y = 0;
|
|
|
|
|
//<2F><>ʼʱ<CABC>ķ<EFBFBD><C4B7><EFBFBD>
|
|
|
|
|
int dir = RIGHT;
|
|
|
|
|
//<2F><>һ<EFBFBD><D2BB>λ<EFBFBD>ñ<EFBFBD>ʶ<EFBFBD><CAB6>
|
|
|
|
|
int step = 1;
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
|
|
|
|
bool UpStep() {
|
|
|
|
|
if (x - 1 >= 0 && a[x - 1][y] == 0) {
|
|
|
|
|
a[--x][y] = ++step;
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
|
|
|
|
bool DownStep() {
|
|
|
|
|
if (x + 1 < n && a[x + 1][y] == 0) {
|
|
|
|
|
a[++x][y] = ++step;
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
|
|
|
|
bool RightStep() {
|
|
|
|
|
if (y + 1 < n && a[x][y + 1] == 0) {
|
|
|
|
|
a[x][++y] = ++step;
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
|
|
|
|
bool LeftStep() {
|
|
|
|
|
if (y - 1 >= 0 && a[x][y - 1] == 0) {
|
|
|
|
|
a[x][--y] = ++step;
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//<2F><>ȡ<EFBFBD><C8A1>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>Եķ<D4B5><C4B7><EFBFBD>
|
|
|
|
|
int NextDir(int turn) {
|
|
|
|
|
//<2F><>Ҫ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD>˳ʱ<CBB3>뻹<EFBFBD><EBBBB9><EFBFBD><EFBFBD>ʱ<EFBFBD>룬<EFBFBD><EBA3AC>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Dz<EFBFBD>ͬ<EFBFBD><CDAC>
|
|
|
|
|
if (turn == 1) { //˳ʱ<CBB3><CAB1>
|
|
|
|
|
for (int i = 0; i < 4; ++i) {
|
|
|
|
|
if (dirSun[i] == dir) {
|
|
|
|
|
return dirSun[i + 1 == 4 ? 0 : i + 1];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else { //<2F><>ʱ<EFBFBD><CAB1>
|
|
|
|
|
for (int i = 0; i < 4; ++i) {
|
|
|
|
|
if (dirNi[i] == dir) {
|
|
|
|
|
return dirNi[i + 1 == 4 ? 0 : i + 1];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//<2F>˹<EFBFBD><CBB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Ҳ<EFBFBD>Ǻ<EFBFBD><C7BA>ĵ<EFBFBD>˼·
|
|
|
|
|
bool autoStep(int turn) { //turn:<3A><>˳ʱ<CBB3><CAB1>:1,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>:2
|
|
|
|
|
bool success;
|
|
|
|
|
int tryCount = 0;
|
|
|
|
|
while (tryCount < 4) {
|
|
|
|
|
//1<><31><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
|
|
|
|
switch (dir) {
|
|
|
|
|
case UP:
|
|
|
|
|
success = UpStep();
|
|
|
|
|
if (success) return true;
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
dir = NextDir(turn);
|
|
|
|
|
break;
|
|
|
|
|
case DOWN:
|
|
|
|
|
success = DownStep();
|
|
|
|
|
if (success) return true;
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
dir = NextDir(turn);
|
|
|
|
|
break;
|
|
|
|
|
case RIGHT:
|
|
|
|
|
success = RightStep();
|
|
|
|
|
if (success) return true;
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
dir = NextDir(turn);
|
|
|
|
|
break;
|
|
|
|
|
case LEFT:
|
|
|
|
|
success = LeftStep();
|
|
|
|
|
if (success) return true;
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
dir = NextDir(turn);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
tryCount++;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void helixMatrix() {
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼Ϊ<C2BC><CEAA>һ<EFBFBD><D2BB>
|
|
|
|
|
a[x][y] = 1;
|
|
|
|
|
//<2F><>ִ<EFBFBD><D6B4>n*n<>Σ<EFBFBD><CEA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊֹ<CEAA><D6B9>
|
|
|
|
|
while (step < n * n) {
|
|
|
|
|
//ģ<><C4A3>˳ʱ<CBB3><CAB1>
|
|
|
|
|
bool success = autoStep(2);
|
|
|
|
|
if (!success) {
|
|
|
|
|
cout << "<EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><EFBFBD>" << endl;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ά<EFBFBD><CEAC><EFBFBD><EFBFBD>
|
|
|
|
|
for (int i = 0; i < n; ++i) {
|
|
|
|
|
for (int j = 0; j < n; ++j) {
|
|
|
|
|
cout << setw(2) << a[i][j] << " ";
|
|
|
|
|
}
|
|
|
|
|
cout << endl;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int main() {
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
helixMatrix();
|
|
|
|
|
return 0;
|
|
|
|
|
}
|