Tin Kien Giang K31
Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.

Tin Kien Giang K31

Chao mung den voi dien dan Tin-KG Khoa 31
 
Trang ChínhTìm kiếmLatest imagesĐăng kýĐăng Nhập

 

 ma trận xoắn ốc

Go down 
Tác giảThông điệp
truongcaokg




Tổng số bài gửi : 15
Registration date : 12/09/2007

ma trận xoắn ốc Empty
Bài gửiTiêu đề: ma trận xoắn ốc   ma trận xoắn ốc Empty9/4/2008, 21:10

Để tạo ma trận xoắn ốc,tôi thấy thuật toán sau cũng ngắn hơn tí. các bạn tham khảo rồi cho ý kiến nhé.
Code:

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

using namespace std;

int n,a[20][20],b[100],c[20][20];

void nhapmang(int a[][20],int &n);
void xuatmang(int a[][20],int n);
void chuyen(int a[][20],int b[],int n);
void sapxep(int b[],int n);
void xoanoc(int c[][20],int b[],int n);

int main()
{
   nhapmang(a,n);
   chuyen(a,b,n);
   sapxep(b,n);
   xoanoc(c,b,n);
   xuatmang(c,n);

   getch();

   return 0;
}

void nhapmang(int a[][20],int &n)
{
   cout<<"nhap cap cua ma tran: ";
   cin>>n;

   for(int i=0;i<n;++i)
      for(int j=0;j<n;++j)
      {
         cout<<"a["<<i<<","<<j<<"]= ";
         cin>>a[i][j];
      }
}

void chuyen(int a[][20],int b[],int n)
{
   int k=0;
   for(int i=0;i<n;++i)
      for(int j=0;j<n;++j)
      {
         b[k]=a[i][j];      ++k;
      }
}

void sapxep(int b[],int n)
{

   int x=pow(n,2);
   for(int i=0;i<x;++i)
   {
      int min=i;

      for(int j=i+1;j<x;++j)
         if(b[j]<b[min])  min=j;
      
         int y=b[i];    //có thế dùng hàm swap()
         b[i]=b[min];
         b[min]=y;      
   }
}

void xoanoc(int c[][20],int b[],int n)
{
   int i=0,j=0,l=n-1,k=0,u,x;
   u=x=pow(n,2);

   if(n%2!=0) u=u-1;
   while(k<u)
   {
      
      for(int t=0;t<l;++t)
      {
         c[i][j+t]=b[k];
         k++;
      }
      j=j+l;
      
      for( t=0;t<l;++t)
      {
      c[i+t][j]=b[k];
      k++;
      }
      i=i+l;
      
      for(t=0;t<l;++t)
      {
         c[i][j-t]=b[k];
         k++;
      }
      j=j-l;
      
      for(t=0;t<l;++t)
      {
         c[i-t][j]=b[k];
         k++;
      }
      i=i-l+1; ++j;  l=l-2;       
   }
   if(n%2!=0)  c[n/2][n/2]=b[x-1];   
}

void xuatmang(int c[][20],int n)
{
   for(int i=0;i<n;++i)
   {
      for(int j=0;j<n;++j)  cout<<setw(5)<<c[i][j];
      cout<<'\n'<<'\n';
      
   }
}
Về Đầu Trang Go down
 
ma trận xoắn ốc
Về Đầu Trang 
Trang 1 trong tổng số 1 trang

Permissions in this forum:Bạn không có quyền trả lời bài viết
Tin Kien Giang K31 :: Cộng Đồng :: Cộng Đồng :: Thảo luận chung-
Chuyển đến