#include <iostream>
#include <fstream>
#include <math.h>
using namespace std;
int n;
int mat[100][100];
int main()
{
fstream fin("input.txt");
fin >> n;
for(int i = 0; i < n; i ++)
{
for(int j = 0; j < n; j ++)
fin >> mat[i][j];
}
int v = log((double)n) / log(2.0);
for(int iter = 0; iter < v ; iter++)// 로그엔번
{
for(int i = 0; i < n; i ++)
{
for(int k = 0; k < n; k ++)
{
for(int j = 0; j + 1 < n; j += 2)
{
if( (i % 2) == 0 && mat[i][j] > mat[i][j + 1])
{
std::swap(mat[i][j], mat[i][j + 1]);
}
else if( (i % 2) == 1 && mat[i][j] < mat[i][j + 1])
{
std::swap(mat[i][j], mat[i][j + 1]);
}
}
for(int j = 1; j + 1 < n; j += 2)
{
if( (i % 2) == 0 && mat[i][j] > mat[i][j + 1])
{
std::swap(mat[i][j], mat[i][j + 1]);
}
else if( (i % 2) == 1 && mat[i][j] < mat[i][j + 1])
{
std::swap(mat[i][j], mat[i][j + 1]);
}
}
}
}
cout << endl;
/// 수직 검사
for(int j = 0; j < n; j ++){
for(int k = 0; k < n; k ++)
{
for(int i = 0; i + 1 < n; i += 2)
{
if( mat[i][j] > mat[i + 1][j])
std::swap(mat[i][j], mat[i + 1][j]);
}
for(int i = 1; i + 1 < n; i += 2)
{
if( mat[i][j] > mat[i + 1][j])
std::swap(mat[i][j], mat[i + 1][j]);
}
}
}
}
for(int i = 0; i < n; i ++)
{
for(int k = 0; k < n; k ++)
{
for(int j = 0; j + 1 < n; j += 2)
{
if( mat[i][j] > mat[i][j + 1])
{
std::swap(mat[i][j], mat[i][j + 1]);
}
}
for(int j = 1; j + 1 < n; j += 2)
{
if( mat[i][j] > mat[i][j + 1])
{
std::swap(mat[i][j], mat[i][j + 1]);
}
}
}
}
for(int i = 0; i < n; i ++)
{
for(int j = 0; j < n; j ++)
cout << mat[i][j] << " ";
cout << endl;
}
}
'공부 > 알고리즘2' 카테고리의 다른 글
Longest Common Subsequence (0) | 2014.12.04 |
---|---|
토너먼트 노멀 케이스 (n != 2^k) (0) | 2014.11.27 |
Tournament : Bin Packing Problem (0) | 2014.11.20 |
HIGHEST TOWER BF + TOPOL + GRAPH (0) | 2014.11.13 |
Topological Sort + Bellman Ford로 O(e) 시간에 풀기 (0) | 2014.11.13 |