顺时针打印矩阵
来源:互联网 发布:2015中国造船数据分析 编辑:程序博客网 时间:2024/04/29 06:32
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
例如:如果输入如下矩阵:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
则依次打印出数字1, 2, 3, 4, 8, 12, 16, 15, 14, 13, 9, 5, 6, 7, 11, 10。
这个题目代码写的并不好感觉,好多if看着就烦,就是提供一个思路,用一个标识矩阵flag来标识这个值是否被访问过。然后搜索方向变化为右、下、左、上。其实也可以逆时针的访问。
#include <iostream>using namespace std;void printMatrix (int **matrix, int i, int j);enum direction{ dir_left = 0, dir_right, dir_up, dir_down };int main (){ int i = 4; int j = 4; int **matrix = new int *[i]; for (int m = 0; m < i; m++) matrix[m] = new int[j] (); int value = 0; for (int m = 0; m < i; m++) for (int n = 0; n < j; n++) matrix[m][n] = ++value; printMatrix (matrix, i, j); return 0;}void printMatrix (int **matrix, int row, int col){ bool **flag = new bool *[row + 2]; for (int m = 0; m < row + 2; m++) { flag[m] = new bool[col + 2] (); if (m == 0 || m == row + 1) //第一行与倒数第一行置为1 { for (int n = 0; n < col + 2; n++) flag[m][n] = 1; } else //这一行的第一列与最后一列置为1 { flag[m][0] = 1; flag[m][col + 1] = 1; } } int flag_row = 1; int flag_col = 1; direction dir = dir_right; for (int i = 0; i < row * col; i++) { cout << matrix[flag_row - 1][flag_col - 1] << " " << i << endl; flag[flag_row][flag_col] = 1; while (i != row * col - 1)//这个while是为了当方向为up跳到方向right的时候的循环,而且特别注意i的值为row*col-1就要结束 { if (dir == dir_right) { if (flag[flag_row][flag_col + 1] == 0) { flag_col++; break; } else dir = dir_down; } if (dir == dir_down) { if (flag[flag_row + 1][flag_col] == 0) { flag_row++; break; } else dir = dir_left; } if (dir == dir_left) { if (flag[flag_row][flag_col - 1] == 0) { flag_col--; break; } else dir = dir_up; } if (dir == dir_up) { if (flag[flag_row - 1][flag_col] == 0) { flag_row--; break; } else dir = dir_right; } } } for (int i = 0; i < row + 2; i++) { for (int j = 0; j < col + 2; j++) cout << flag[i][j] << " "; cout << endl; }}
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 矩阵顺时针打印
- 顺时针打印矩阵
- 顺时针打印矩阵[算法]
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 黑马程序员_java学习笔记02
- 爱上MongoDB的七大理由
- 发帖水王
- 二维几何模版
- 走上工作岗位的一些杂碎
- 顺时针打印矩阵
- 树状数组和线段树常用模型
- Java编程中尽可能要做到的一些地方
- 黑马程序员_java学习笔记03
- 我在汕头搞企业管理系统(一)
- SQL Server数据库表主键重置
- 1.3项目计划表
- 重建redo-oracle数据库恢复
- 一次遍历反转链表