“蛇皮”取数,是个数学题,基本思想是一圈一圈的来,然后设置四个指针,分别指向行列的开始,每次循环改变这些指针,
头++,尾--
#include <iostream>
using namespace std;
int main(void)
{
int ff;
scanf("%d",&ff);
while(ff--)
{
int n,m;
scanf("%d%d",&n,&m);
int a = n;
int b = m;
int p = 1;
int q = 1;
int g1,g2;
scanf("%d%d",&g1,&g2);
int count = 0;
int flag = 1;
while(1)
{
for(int i=n;i>=p;i--)
{
// printf("%d,%d\n",i,p);
count++;
if(i==g1&&p==g2)
{
printf("%d\n",count);
flag = 0;
}
}
if(!flag)
{
break;
}
for(int i=q+1;i<=m;i++)
{
// printf("%d,%d\n",q,i);
count++;
if(q==g1&&i==g2)
{
printf("%d\n",count);
flag = 0;
}
}
if(!flag)
{
break;
}
for(int i=p+1;i<=n;i++)
{
// printf("%d,%d\n",i,m);
count++;
if(i==g1&&m==g2)
{
printf("%d\n",count);
flag = 0;
}
}
if(!flag)
{
break;
}
for(int i=m-1;i>=q+1;i--)
{
// printf("%d,%d\n",n,i);
count++;
if(n==g1&&i==g2)
{
printf("%d\n",count);
flag = 0;
}
}
if(!flag)
{
break;
}
n--;
p++;q++;
m--;
if(count==a*b)
{
break;
}
}
}
}