Z字形扫描矩阵
https://www.cnblogs.com/tgycoder/p/4991663.html
#include "stdafx.h"
#include <malloc.h>
#define N 10
int matrix[N][N];
typedef enum State{ R, LD, D, RU };
State last_state = RU;
State next_state = R;
int row = 0;
int col = 0;
int search_element(int** matrix, int matrix_size, int search_num)
{
int result=-1;
while (search_num--)
{
printf("%d ", result = matrix[row][col]);//打印出走的每一步
switch (next_state)
{
case R:
col = col + 1;
last_state = R;
next_state = LD;//只走一步
break;
case LD:
row = row + 1;
col = col - 1;
last_state = LD;
if (col == 0)
{
next_state = D;
}
else
{
next_state = LD;
}
break;
case D:
row = row + 1;
last_state = D;
next_state = RU;
break;//只走一步
case RU:
row = row - 1;
col = col + 1;
if (row == 0)
{
next_state = R;
}
else
{
next_state = RU;
}
break;
}
//print 打印遍历过的元素
}
return result;
}
int _tmain(int argc, _TCHAR* argv[])
{
int** matrix = (int**)malloc(N*sizeof(int*));
for (int i = 0; i < N; i++)
{
matrix[i] = (int*)malloc(N*sizeof(int));
}
for (int i = 0; i < N; i++)//矩阵初始化
{
for (int j = 0; j < N; j++)
{
matrix[i][j] = i*N + j+1;
printf("%3d ",matrix[i][j]);
}
printf("\n");
}
printf("\nfind result value = %d\n", search_element(matrix, N, 22));
return 0;
}

浙公网安备 33010602011771号