程式應該很簡單
但我在 if 和 goto 猶豫很久
聽說 goto 會破壞程式結構,但加 if ( startx 的地方)感覺效率不彰......
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int N;
int arr[50][50];
int dir;
int upper, lower, right, left;
int Sx, Sy;
int cnt;
while(cin >> N){
cin >> dir;
for(int i = 0; i<N; i++)
for(int j = 0; j<N; j++)
cin >> arr[i][j];
Sx = Sy = N/2;
upper = lower = left = right = N/2;
cout << arr[Sx][Sy];
cnt = 1;
switch(dir){
case 0:
left--;
goto start4;
break;
case 1:
upper--;
goto start1;
break;
case 2:
right++;
goto start2;
break;
case 3:
lower++;
goto start3;
break;
default:
break;
}
while(cnt < N*N){
start1:
while(cnt < N*N && Sy > upper){
cout << arr[--Sy][Sx];
cnt++;
}
right++;
start2:
while(cnt < N*N && Sx < right){
cout << arr[Sy][++Sx];
cnt++;
}
lower++;
start3:
while(cnt < N*N &&Sy < lower){
cout << arr[++Sy][Sx];
cnt++;
}
left--;
start4:
while(cnt < N*N &&Sx > left){
cout << arr[Sy][--Sx];
cnt++;
}
upper--;
}
cout << endl;
}
return 0;
}