You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.
# include <bits/stdc++.h>
using namespace std ;
vector < vector < int > > twoDimensionVec ;
int n ;
//出发点
int row = 0 , col = 0 ;
//初始化方向
int dir = 0 ;
//变更方向
//0:右
//1:左下
//2:下
//3:右上
void changeDir ( ) {
switch ( dir ) {
//如果原来是向右
case 0 :
//检查左下是不是可以走
if ( row + 1 < n & & col - 1 > = 0 ) {
dir = 1 ;
} else { //左下走不了,走右上
dir = 3 ;
}
break ;
//如果原来是1号, 即左下
case 1 :
//优先向下
if ( row + 1 < n ) dir = 2 ;
//次选横向
else dir = 0 ;
break ;
//如果原来是2号, 优先右上
//否则 左下
case 2 :
if ( col + 1 < n & & row - 1 > = 0 ) dir = 3 ;
else dir = 1 ;
break ;
//右上
case 3 :
//优先向右,次选向下
if ( col + 1 < n ) dir = 0 ;
else dir = 2 ;
break ;
}
}
int main ( ) {
cin > > n ;
for ( int i = 0 ; i < n ; i + + ) {
vector < int > oneDimensionVec ;
for ( int j = 0 ; j < 4 ; j + + ) {
int c ;
cin > > c ;
oneDimensionVec . push_back ( c ) ;
}
twoDimensionVec . push_back ( oneDimensionVec ) ;
}
//第一个位置
cout < < twoDimensionVec [ row ] [ col ] < < " " ;
int count = 0 ;
//如果没有到达出口位置
while ( ! ( row = = n - 1 & & col = = n - 1 ) ) {
count + + ;
if ( count = = 8 ) {
int a = 1 ;
}
switch ( dir ) {
case 0 :
//向右横向移动一格
if ( col < n - 1 ) {
col + + ;
cout < < twoDimensionVec [ row ] [ col ] < < " " ;
}
break ;
case 1 :
//向左下角走一个斜格子
while ( col > 0 & & row < n - 1 ) {
row + + ;
col - - ;
cout < < twoDimensionVec [ row ] [ col ] < < " " ;
}
break ;
case 2 :
if ( row < n - 1 ) {
row + + ;
cout < < twoDimensionVec [ row ] [ col ] < < " " ;
}
break ;
case 3 :
while ( col < n - 1 & & row > 0 ) {
row - - ;
col + + ;
cout < < twoDimensionVec [ row ] [ col ] < < " " ;
}
break ;
}
//变更方向
changeDir ( ) ;
}
return 0 ;
}