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

          友情鏈接

          最新隨筆

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 和顺县| 本溪市| 图木舒克市| 炎陵县| 靖宇县| 临高县| 宽城| 璧山县| 汉沽区| 拜泉县| 桦川县| 兰考县| 南陵县| 芜湖市| 安阳县| 石楼县| 柏乡县| 措勤县| 岳池县| 海阳市| 晋中市| 青川县| 灵璧县| 肃北| 北海市| 土默特右旗| 错那县| 南城县| 南郑县| 建瓯市| 梁河县| 阜康市| 长沙市| 大埔区| 达尔| 棋牌| 宿州市| 磐石市| 太仆寺旗| 虹口区| 营口市|