有m*n枚金幣在桌面上排成乙個金幣陣列。每乙個金幣正面朝上,或背面朝上,分別用0和1表示。
金幣陣列遊戲的規則是:
(1)每次可將任一行金幣翻過來放在原來的位置上;
(2)每次可任選2列,交換這2列金幣的位置。
給定金幣的初始狀態和目標狀態,計算按金幣遊戲規則,將金幣陣列從初始狀態變換到目標狀態所需的最少變換次數。
#include#include#define m 4
#define n 3
int a[m][n] = ,,,};
int b[m][n] = ,,,};
int temp[m][n];
int count;
//對某一行進行反轉,這裡是第col行
void trans1(int col)
//交換第col1列和第col2列
void trans2(int col1,int col2)
if(col1 != col2)
count ++;
}//判斷臨時陣列的第i列和目標陣列的第j列是否相等
bool same(int i,int j)
} return flag;
}int main()
trans2(0,k);
//比較第一列的所有元素,不相等就進行行變換
for(i = 0;i < m;i ++)
if(temp[i][0] != b[i][0])
trans1(i);
bool found;
//檢查每一列是否滿足條件
for(i = 0;i < n;i ++)
for(j = i + 1;j < n;j ++)
if(same(i,j))
if(found == false)
break;
} if(found == true)
answer = count;
} if(answer != 999999)
printf("%d",answer);
return 0;
}
金幣陣列問題
問題描述 有m x n m 100,n 100 個金幣在桌面上排成乙個m行n 列的金幣陣列。每一枚金幣或正面朝上或背面朝上。用數字表示金幣狀態,0表示金幣正面朝上,1 表示背面朝上。金幣陣列遊戲的規則是 1 每次可將任一行金幣翻過來放在原來的位置上 2 每次可任選2 列,交換這2 列金幣的位置。程式...
金幣陣列問題
有m n枚金幣在桌面上排成乙個金幣陣列。每乙個金幣正面朝上,或背面朝上,分別用0和1表示。金幣陣列遊戲的規則是 1 每次可將任一行金幣翻過來放在原來的位置上 2 每次可任選2列,交換這2列金幣的位置。給定金幣的初始狀態和目標狀態,計算按金幣遊戲規則,將金幣陣列從初始狀態變換到目標狀態所需的最少變換次...
金幣陣列問題
1.問題描述 有mxn枚金幣 m,n 100 在桌面上擺成乙個m行n列的陣列,每一枚金幣正面朝上或者背面朝上,用數字0和1表示金幣的狀態。遊戲規則 每次將任意一行金幣翻過來 每次可任意交換兩列 演算法設計 給定陣列初始狀態,目標狀態,按遊戲規則計算從初始狀態到目標狀態需要的最少變換次數 資料輸入 從...