这是Z字型扫描,我写了一个程序,
算法主要是根据扫描的方向
程序根据输入的n在一个数组中给出1-n每个数的坐标
#include "malloc.h"
#include "stdlib.h"
typedef struct
{
int direct; //当前节点运动方向: 0, 水平 1, 垂直 2, 斜向上 3, 斜向下
int x; //目标位置横坐标
int y; //目标位置纵坐标
} node_t;
static scan(node_t* ns, int n)
{
if(ns[n-1].direct == 0)
{
ns[n].x = ns[n-1].x + 1;
ns[n].y = ns[n-1].y;
ns[n].direct = 3;
}
else if(ns[n-1].direct == 1)
{
ns[n].direct = 2;
ns[n].x = ns[n-1].x;
ns[n].y = ns[n-1].y + 1;
}
else if(ns[n-1].direct == 2)
{
ns[n].x = ns[n-1].x + 1;
ns[n].y = ns[n-1].y - 1;
if(ns[n-1].y == 1)
ns[n].direct = 0;
else
ns[n].direct = 2;
}
else if(ns[n-1].direct == 3)
{
ns[n].x = ns[n-1].x - 1;
ns[n].y = ns[n-1].y + 1;
if(ns[n-1].x == 1)
ns[n].direct = 1;
else
ns[n].direct = 3;
}
}
int main(int argc, char* argv[])
{
int n = atoi(argv[1]);
node_t* ns = (node_t*) malloc( sizeof(node_t)*n );
ns[0].direct = 1;
ns[0].x = 0;
ns[0].y = 0;
for(int i = 1; i < n; i++)
{
scan(ns, i);
}
free(ns);
return 0;
}