题意:存在一个六角格,求出经过所有六角格的一个路线,每次有六个方向123456。
思路:
根据上面两张图总结规律(N为半径)
N为奇数:
424242 353535 34 646464 515151 56 262626 1313 12 43
42 35 34 64 51 56 26 12 43
N为偶数:
规律:4242 3535 34 6464 5151 56 2626 13 12 43
543125
#include <bits/stdc++.h>
using namespace std;
const int N =2e6+5;
int n,ls;
char s[N];
void walk(int x,int y){
assert(x>2);
for(int i=1;i<=x-2;i++){
s[ls++] = '0'+(4+y-1)%6+1;
s[ls++] = '0'+(2+y-1)%6+1;
}
s[ls++] = '0'+(3+y-1)%6+1;
}
void walk_circle(int x){
for(int i=0;i<=5;i++){
walk(x,i);
}
s[ls-3] = '2';
s[ls-2] = '4';
s[ls-1] = '3';
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
int tcase;
cin>>tcase;
while(tcase--){
int n;
cin>>n;
//判断n奇偶数
ls = 0;
if(n%2==0){
for(int i=n;i>2;i-=2){
walk_circle(i);
}
for(int i=5;i>=1;i--){
s[ls++] = '0' + i;
}
s[ls++] = '5';
}
else{
for(int i=n;i>1;i-=2){
walk_circle(i);
}
}
s[ls] = 0;
cout<<s<<endl;
}
}