思路:如下图
AC代码:
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
int main()
{
int vis[200][200] = {1};
int n;
scanf("%d", &n);
if(n == 2)
{
printf("5\n1 1\n1 2\n1 3\n2 3\n2 2\n2 1\n");
return 0;
}
printf("%d\n", n * (n + 1) - 1);//按照上图的路线走,每条路的代价为1一共有n*(n-1)条路
if(n % 2 == 1)
{
for(int i = n + 1; i >= 1; i--)
printf("%d %d\n", n, i);
for(int i = n / 2; i > 0; i--)
{
for(int j = 1; j <= n + 1; j++)
{
if(j % 2 == 1)
printf("%d %d\n", 2 * i, j);
else
printf("%d %d\n", 2 * i - 1, j);
}
for(int j = n + 1; j >= 1; j--)
{
if(j % 2 == 1)
printf("%d %d\n", 2 * i - 1, j);
else
printf("%d %d\n", 2 * i, j);
}
}
}
else
{
for(int j = 1; j <= n / 2; j++)
{
for(int i = 1; i <= n; i++)
{
if(i % 2 == 1)
printf("%d %d\n", i, j * 2 - 1);
else
printf("%d %d\n", i, j * 2);
}
for(int i = n; i >= 1; i--)
{
if(i % 2 == 1)
printf("%d %d\n", i, j * 2);
else
printf("%d %d\n", i, j * 2 - 1);
}
}
for(int i = 1; i <= n; i++)
printf("%d %d\n", i, n+1);
}
return 0;
}