题解 P5512 【棋盘问题(2)【加强】】
点开这道题发现N<=10 ,脑海中立刻浮现一种算法 打表
过程就不必多说,深搜暴力跑上几天总能跑完,只是求第一行加第一列和最小很恶心,
上代码
#include<bits/stdc++.h>
using namespace std;
int n;
int main()
{
cin>>n;
if(n==1||n==3)
{
puts("NO");
}
else if(n==2)
{
puts("1 2");
puts("4 3");
}
else if(n==4)
{
puts("1 2 11 12");
puts("4 9 8 5");
puts("7 10 3 14");
puts("6 13 16 15");
}
else if(n==5)
{
puts("1 2 3 4 7");
puts("6 5 14 15 16");
puts("13 24 23 8 21");
puts("10 19 18 11 20");
puts("9 22 25 12 17");
}
else if(n==6)
{
puts("1 2 3 8 9 4");
puts("6 11 20 33 28 25");
puts("5 36 23 14 15 22");
puts("12 31 30 17 26 21");
puts("7 16 13 24 35 32");
puts("10 27 34 19 18 29");
}
else if(n==7)
{
puts("1 2 3 4 7 6 5");
puts("12 17 14 15 16 25 18");
puts("11 20 33 46 37 42 41");
puts("8 21 40 43 36 47 32");
puts("9 22 49 24 35 26 27");
puts("10 19 48 23 38 45 34");
puts("13 28 31 30 29 44 39");
}
else if(n==8)
{
puts("1 2 3 4 7 6 5 14");
puts("12 17 20 27 34 25 18 23");
puts("11 26 21 32 39 28 61 36");
puts("8 15 46 51 58 31 48 35");
puts("9 22 57 52 55 42 41 62");
puts("10 19 40 49 54 47 56 45");
puts("13 24 43 60 53 50 33 64");
puts("16 37 30 29 44 59 38 63");
}
else if(n==9)
{
puts("1 2 3 4 7 6 5 8 9");
puts("10 21 20 27 34 25 18 23 38");
puts("13 40 33 26 45 28 19 24 35");
puts("16 31 76 81 68 69 70 79 72");
puts("15 22 51 56 71 80 57 52 37");
puts("14 39 62 41 60 47 32 75 64");
puts("17 44 65 48 49 54 77 74 63");
puts("12 29 42 55 58 73 36 53 50");
puts("11 30 67 46 43 66 61 78 59");
}
else if(n==10)
{
puts("1 2 3 4 7 6 5 8 9 10");
puts("12 29 38 33 34 25 36 23 44 27");
puts("11 30 59 68 45 28 43 24 35 26");
puts("18 41 42 71 56 75 64 37 66 47");
puts("13 48 19 60 53 98 93 100 91 90");
puts("16 31 40 97 54 83 74 99 82 67");
puts("15 22 49 52 55 96 77 80 57 46");
puts("14 39 58 79 72 95 62 87 70 61");
puts("17 50 51 88 85 78 89 92 81 76");
puts("20 21 32 69 94 73 84 65 86 63");
}
return 0;
}
打表可以自己去尝试一下,不要直接抄袭