当前所在位置:珠峰网资料 >> 计算机 >> 软件水平 >> 正文
数据结构算法:螺旋矩阵算法
发布时间:2010/11/10 15:26:00 来源:www.xue.net 编辑:城市总裁吧
     这个问题看似很难,但是其实只有有了正确的,规范的逻辑思想算法以后(就像看了这个算法以后),感觉其实这个问题很简单,于是我们不但要学习高深的算法,还要掌握一流的逻辑思维理念。这个算法值得我们学习的地方就是他的数学建模思想,把复杂的问题抽象出来,成为了4个方向的结构式模块组合,于是复杂的问题就简单化了!!!
  #include <iostream>
  #include <iomanip>
  using namespace std;
  void right(); //向左输入的赋值函数
  void down();
  void left();
  void up();
  void show(); //显示函数
  void sort(); //控制方向的函数
  int value;
  int direction = 0; //控制方向
  int rightNum = 0; //向右输入一行的次数
  int downNum = 0;
  int leftNum = 0;
  int upNum = 0;
  int arrayNum = 0; //自增赋值数
  int row = 0; //保存行下标
  int col =0; //保存列下标
  int array[100][100]; //保存数组
  int main(int argc, char *argv[])
  {
  cout<<\"N*N, enter N:\"<<endl;
  cin>>value;
  sort();
  show();
  system(\"pause\");
  return 0;
  }
  void sort()
  {
  while(arrayNum != value*value) //循环跳出条件,赋值完毕
  {
  switch(direction)
  {
  case 0:
  right();
  break;
  case 1:
  down();
  break;
  case 2:
  left();
  break;
  case 3:
  up();
  break;
  default:
  break;
  }
  }
  return;
  }
  void right()
  {
  int m = row;
  int n = col;
  if(m==0&&n==0)
  {
  array[m][n] = ++arrayNum;
  }
  for(int i=n+1; i<value-rightNum;i++)
  {
  array[m][i] = ++arrayNum;
  n++;
  }
  row=m;
  col=n;
  rightNum++;
  direction = 1;
  return;
  }
  void down()
  {
  int m = row;
  int n = col;
  for(int i=m+1; i<value-downNum;i++)
  {
  array[i][n] = ++arrayNum;
  m++;
  }
  row=m;
  col=n;
  downNum++;
  direction = 2;
  return;
  }
  void left()
  {
  int m = row;
  int n = col;
  for(int i=n-1; i>=leftNum;i--)
  {
  array[m][i] = ++arrayNum;
  n--;
  }
  row=m;
  col=n;
  leftNum++;
  direction = 3;
  return;
  }
  void up()
  {
  int m = row;
  int n = col;
  for(int i=m-1; i>upNum; i--)
  {
  array[i][n] = ++arrayNum;
  m--;
  }
  row=m;
  col=n;
  upNum++;
  direction = 0;
  return;
  }
  void show()
  {
  int n =0;
  for(int i=0; i<value; i++)
  {
  for(int j=0; j<value; j++)
  {
  cout<<setw(value)<<array[i][j];
  }
  cout<<endl;
  }
  }
广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved