首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C 矩陣轉置就地算法錯誤:雙重交換導致還原,修正為僅交換上三角

     編輯:程式設計疑難解答

錯誤代碼

for (i = 0; i < M; i++)
    for (j = 0; j < M; j++) {
        int t = a[i][j];
        a[i][j] = a[j][i];
        a[j][i] = t;
    }

完整遍歷會將 (i,j) 與 (j,i) 交換兩次,最終矩陣不變。

修正:僅交換上三角 (j > i)

for (i = 0; i < M; i++)
    for (j = i + 1; j < M; j++) { // 或 j = 0; j < i; j++
        int t = a[i][j];
        a[i][j] = a[j][i];
        a[j][i] = t;
    }

完整可執行程式

#include <stdio.h>
#define M 4
int main() {
    int a[M][M] = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
    printf("原矩陣:\n");
    for (int i=0;i

非方陣轉置

需額外分配新矩陣 b[N][M],b[j][i] = a[i][j],無法就地轉置。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved