九度 1470 调整方阵

题目描述:

输入一个N(N<=10)阶方阵,按照如下方式调整方阵:
1.将第一列中最大数所在的行与第一行对调。
2.将第二列中从第二行到第N行最大数所在的行与第二行对调。
依此类推...
N-1.将第N-1列中从第N-1行到第N行最大数所在的行与第N-1行对调。
N.输出这个方阵

 

思路

1. 简单模拟题

2. 使用 dfs, 每次递归调整一行

 

代码

#include <iostream>
#include <stdio.h>
#include <vector>
using namespace std;
 
vector<int> matrix[12];
 
void dfs(int i, int n) {
    if(i == n-1)
        return;
 
    int maxVal = matrix[i][i], maxLine = i;
    for(int j = i+1; j < n; j++) {
        if(maxVal < matrix[j][i]) {
            maxVal = matrix[j][i];
            maxLine = j;
        }
    }
    swap(matrix[i], matrix[maxLine]);
    dfs(i+1, n);
}
 
void printMatrix(int n) {
    for(int i = 0; i < n; i ++) {
        printf("%d", matrix[i][0]);
        for(int j = 1; j < n; j ++) {
            printf(" %d", matrix[i][j]);
        }
        printf("\n");
    }
}
int main() {
    //freopen("testcase.txt", "r", stdin);
    int n;
    int cur;
    while(scanf("%d", &n) != EOF) { 
        if(n  <= 0 ) continue;
        for(int i = 0; i < n; i ++) {
            matrix[i].clear();
            for(int j = 0; j < n; j ++) {
                scanf("%d", &cur);
                matrix[i].push_back(cur);
            }
        }
        //printMatrix(n);
        dfs(0, n);
        printMatrix(n);
    }
    return 0;
}

 

posted @ 2014-03-02 21:37  SangS  阅读(181)  评论(0编辑  收藏  举报