seaairland

           

          經典矩陣問題

          經典矩形問題
          生成各種矩陣是競賽時經常考的一種題目,如何用C語言或C++生成以下形式幾種矩陣:

          第一種矩陣:

          1 2 9 10
          4 3 8 11
          5 6 7 12
          16 15 14 13


          第二種矩陣:(蛇形)

          1 2 6 7
          3 5 8 13
          4 9 12 14
          10 11 15 16


          第三種矩陣:

          1 2 3 4
          12 13 14 5
          11 16 15 6
          10 9 8 7


          第四種矩陣:

          7 6 5 16
          8 1 4 15
          9 2 3 14
          10 11 12 13


          規律提示:

          1.1->2 9->10
          4<-3 8 11
          5->6->7 12
          16<-15<-14<-13
          2.每個左上三角的數都是連續的
          3.一個回旋陣,從外到里是連續的。
          4.同樣是回旋,從里到外是連續的。

          ?

          第一種矩陣算法:

          #include<iostream.h>
          #include<iomanip.h>

          void main()
          {
          const int N=20;
          int i=0,j=0,a[N][N];
          int lap=1,m=1,n;
          while(1)
          {
          cout<<"\ninput matrix row N(N>=2): ";
          cin>>n;
          cout<<endl;
          if(n>=2) break;
          }
          a[i][j]=m++;
          lap++;
          while(lap<=n)
          {
          if(lap%2==0)
          {
          for(j++;i<lap;i++)
          a[i][j]=m++;i--;
          for(j--;j>=0;j--)
          a[i][j]=m++;j++;
          }
          else
          {
          for(i++;j<lap;j++)
          a[i][j]=m++;j--;
          for(i--;i>=0;i--)
          a[i][j]=m++;i++;
          }
          lap++;
          }
          for(i=0;i<n;i++)
          {
          for(j=0;j<n;j++)
          cout<<setw(4)<<setiosflags(ios::left)<<a[i][j];
          cout<<endl;
          }
          cout<<endl;
          }


          第二種矩陣算法:(蛇形)

          #include<iostream.h>
          #include<iomanip.h>

          void main()
          {
          const int MAXLEN=10;
          int nLen;
          int nSnake[MAXLEN][MAXLEN];
          do
          {
          cout<<"\ninput an integer less then "<<MAXLEN<<": ";
          cin>>nLen;
          cout<<endl;
          }while(nLen>MAXLEN);
          int i=0,j=0,s=1,nNum=1;
          //s標記升降方向,斜向上為升(s==1),斜向下為降(s==-1)
          while(1)
          {
          if(s==1)
          {
          nSnake[i][j]=nNum;
          if(i-1<0)
          {
          if(j+1==nLen)
          i++;
          else
          j++;
          s=-1;
          }
          else
          if(j+1==nLen)
          {
          i++;
          s=-1;
          }
          else
          {
          i--;
          j++;
          }
          }
          else
          {
          nSnake[i][j]=nNum;
          if(j-1<0)
          {
          if(i+1==nLen)
          j++;
          else
          i++;
          s=1;
          }
          else
          if(i+1==nLen)
          {
          j++;
          s=1;
          }
          else
          {
          i++;
          j--;
          }
          }
          nNum++;
          if(nNum>nLen*nLen)
          break;
          }
          for(i=0;i<nLen;i++)
          {
          for(j=0;j<nLen;j++)
          cout<<setw(4)<<setiosflags(ios::left)<<nSnake[i][j];
          cout<<endl;
          }
          cout<<endl;
          }


          第三種矩陣算法:

          #include<iostream.h>
          #include<iomanip.h>

          void main()
          {
          const int N=20;
          int i=0,j=0,a[N][N],n;
          int m=1,x1,x2,y1,y2,s=1;
          //x1,x2,y1,y2為上、下、左、右邊界
          //s標記數組元素升降,s==1為升,s==-1為降
          while(1)
          {
          cout<<"\ninput matrix row N(N>=2): ";
          cin>>n;
          cout<<endl;
          if(n>=2)
          break;
          }
          x1=0;y1=0;x2=n;y2=n;
          while(1)
          {
          if(s==1)
          {
          for(j;j<y2;j++)
          a[i][j]=m++;
          j--;i++;y2--;
          for(i;i<x2;i++)
          a[i][j]=m++;
          i--;j--;x2--;
          s=-1;
          }
          else
          {
          for(j;j>=y1;j--)
          a[i][j]=m++;
          j++;i--;y1++;
          for(i;i>=x1+1;i--)
          a[i][j]=m++;
          i++;j++;x1++;
          s=1;
          }
          if(m>n*n)
          break;
          }
          for(i=0;i<n;i++)
          {
          for(j=0;j<n;j++)
          cout<<setw(4)<<setiosflags(ios::left)<<a[i][j];
          cout<<endl;
          }
          cout<<endl;
          }


          第四種矩陣算法:

          #include<iostream.h>
          #include<iomanip.h>

          void main()
          {
          const int N=20;
          int i=0,j=0,a[N][N],n;
          int m,x1,x2,y1,y2,s;
          //x1,x2,y1,y2為上、下、左、右邊界
          //s標記數組元素升降,s==1為升,s==-1為降
          while(1)
          {
          cout<<"\ninput matrix row N(N>=2): ";
          cin>>n;
          cout<<endl;
          if(n>=2)
          break;
          }
          m=n*n;
          x1=0;y1=0;x2=n;y2=n;
          if(n%2==0)
          {j=n-1;y2=n-1;s=1;}
          else
          {i=n-1;y1=1;s=-1;}
          while(1)
          {
          if(s==1)
          {
          for(i;i<x2;i++)
          a[i][j]=m--;
          i--;j--;x2--;
          for(j;j>=y1;j--)
          a[i][j]=m--;
          j++;i--;y1++;
          s=-1;
          }
          else
          {
          for(i;i>=x1;i--)
          a[i][j]=m--;
          i++;j++;x1++;
          for(j;j<y2;j++)
          a[i][j]=m--;
          j--;i++;y2--;
          s=1;
          }
          if(m<1)
          break;
          }
          for(i=0;i<n;i++)
          {
          for(j=0;j<n;j++)
          cout<<setw(4)<<setiosflags(ios::left)<<a[i][j];
          cout<<endl;
          }
          cout<<endl;
          }

          ?

          posted on 2006-04-03 16:08 chenhui 閱讀(718) 評論(0)  編輯  收藏 所屬分類: 好文收集

          導航

          統計

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          介紹 IOC

          友情鏈接

          最新隨筆

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 永宁县| 阳东县| 元氏县| 马尔康县| 文昌市| 肇东市| 临沧市| 武功县| 富宁县| 神池县| 定远县| 革吉县| 梅河口市| 远安县| 益阳市| 罗定市| 绿春县| 淮阳县| 武义县| 喀喇| 乃东县| 临朐县| 嘉荫县| 兰州市| 兴业县| 霍林郭勒市| 龙南县| 三原县| 嘉荫县| 昭平县| 锦州市| 辉县市| 观塘区| 进贤县| 雅安市| 黔西县| 阿克苏市| 平乐县| 锦屏县| 富宁县| 布拖县|