杭电多校第八场 Hexagon(规律)

题意:
在半径为n的蜂窝图里面走,要求走过的点不能再走,输出路径,且相邻两个路径方向要尽量不同。

思路:
每次走边上两层。

(直接拿了王老板的图)

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

typedef long long ll;
using namespace std;

const int maxn = 1e5 + 7;

pair<int,int>b[10] = {
     {
     4,2},{
     5,3},{
     6,4},{
     1,5},{
     2,6},{
     3,1}};
int a[10] = {
     3,4,5,6,1,2};

int main() {
     
    int T;scanf("%d",&T);
    while(T--) {
     
        int n;scanf("%d",&n);
        for(int i = n;i >= 2;i -= 2) {
     
            for(int j = 0;j < 6;j++) {
     
                if(i == 2 && j == 5) printf("3");//2的时候往里面走
                else printf("%d",a[j]);
                for(int k = 0;k < i - 2;k++) {
     
                    printf("%d",b[j].first);
                    if(j == 5 && k == i - 2 - 1) {
     
                        continue;
                    }
                    printf("%d",b[j].second);
                }
            }
            if(i - 2 >= 1) printf("4");//下面有数才填
        }
        printf("\n");
    }
    return 0;
}

你可能感兴趣的:(#,其他比赛题目)