关于数据连续化这个程序的迷茫

来源:百度知道 编辑:UC知道 时间:2024/06/27 04:42:49
刚刚学完C语言 看了这个螺旋方阵的程序 , 很是不懂,请大家帮帮忙解释解释。分不是问题。把我给弄明白了加50

#include <stdio.h>
#define SET_XY(x,y,d) x=sym[d][0], y=sym[d][1]
int main()
{
int m, n, t; //这里的m,n,t代表什么?
int sym[4][2]={{0,-1}, {1,0}, {0,1}, {-1,0}};
while(scanf("%d%d%d", &m, &n, &t) != EOF)
{
int map[32][32] = {0};
int x, y, dx, dy, d, nStep = 2; //dx,dy,d代表的是什么? 为什么nStep是2?
for(x = 1, y = m + 1; x <= n; x++) //这里的y=m+1有什么用?
map[x][0] = map[x][y] = -1; //把这2个数组弄成-1有什么用??
for(x = 1, y = n + 1; x <= m; x++)
map[0][x] = map[y][x] = -1;
x = y = 1; d = 1 + (t == 0); //t==0代表的是什么?
SET_XY(dx, dy, d);
if(map[y+dy][x+dx]) //这个是做什么的?
{
d = (d+1+((t==0)<<1))%4; //这句((t==0)<<1))%4;看的非常迷茫 ,<<是什么符号啊
SET_XY(dx, dy, d); //这里的d并没有赋值,如何使用?
}

#include <stdio.h>
#define SET_XY(x,y,d) x=sym[d][0], y=sym[d][1]
int main()
{
int m, n, t; //m代表列 n代表行 t代表顺逆方向 0为逆 非0为顺
int sym[4][2]={0,-1, 1,0, 0,1, -1,0,}; //连续化处理的关键
while(scanf("%d%d%d", &m, &n, &t) != EOF)
{
int map[32][32] = {0}; //初始化数据
int x, y, dx, dy, d, nStep = 2;
for(x = 1, y = m + 1; x <= n; x++) /*设置上下边界
map[x][0] = map[x][y] = -1;
for(x = 1, y = n + 1; x <= m; x++) //设置左右边界
map[0][x] = map[y][x] = -1;
x = y = 1; d = 1 + (t == 0);
SET_XY(dx, dy, d);
if(map[y+dy][x+dx]) //设置起始方向
{
d = (d+1+((t==0)<<1))%4; //d就是方向(<< 或 >> 是移位操作符)
SET_XY(dx, dy, d); //d在上面已经赋值了
}
for(map[1][1] = 1;;nStep++) //螺旋遍历
{
x += dx , y += dy;
map[y][x] = nStep;