truongcaokg
Tổng số bài gửi : 15 Registration date : 12/09/2007
| Tiêu đề: ma trận xoắn ốc 9/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'; } }
| |
|