1. 程式人生 > >布林矩陣的奇偶性

布林矩陣的奇偶性

題目描述

一個布林方陣具有奇偶均勢特性,當且僅當 每行、每列總和為偶數,即包含偶數個1。如下面這個4*4的矩陣就具有奇偶均勢特性:

1 0 1 0

0 0 0 0

1 1 1 1

0 1 0 1

編寫程式,讀入一個n階方陣並檢查它是否具有奇偶均勢特性。如果沒有,你的程式應當再檢查一下它是否可以通過修改一位(把0改為1,把1改為0)來使它具有奇偶均勢特性;如果不可能,這個矩陣就被認為是破壞了。

定義並呼叫如下函式:

int BalanceMatrix(int a[], int n);

函式返回1表示該矩陣具有奇偶均勢特性;函式返回2表示可以通過修改1位來達到奇偶均勢;函式返回-1表示該矩陣被是破壞了,無法恢復。

輸入

第一行是一個整數n ( 0< n < 100 ),代表該方陣的階數。然後輸入n 行,每行n個整數(0或1)。

輸出

如果矩陣是布林矩陣,輸出“OK”;如果能通過只修改該矩陣中的一位來使它成為布林矩陣,則輸出“Change bit(i,j)”,這裡i和j是被修改的元素的行與列(行,列號從0開始);否則,輸出“Corrupt”。

樣例輸入

4
1 0 1 0
0 0 0 0
1 1 1 1
0 1 0 1

樣例輸出

OK
#include<stdio.h>
int panduan(int b[101][101], int n);
void xiugai(int c[101][101], int n);

int main()
{
	int i,j,n;
	int a[101][101];
	scanf("%d",&n);
	for(i = 0; i < n; i ++)
		for(j = 0; j < n; j ++)
			scanf("%d",&a[i][j]);
	if(panduan(a,n))
		printf("OK\n");
	else
		xiugai(a,n);
	return 0;
}
int panduan(int b[101][101], int n)
{
	int i,j,sum;
	for(i = 0; i < n; i ++)
	{
		sum = 0;
		for(j = 0; j < n; j ++)
		{
			sum += b[i][j];
		}
		if(sum % 2 != 0)
			return 0;
	}
	for(j = 0; j < n; j ++)
	{
		sum = 0;
		for(i = 0; i < n; i ++)
		{
			sum += b[i][j];
		}
		if(sum % 2 != 0)
			return 0;
	}
	return 1;
}
void xiugai(int c[101][101], int n)
{
	int i,j,x,y,sum,p=0,q=0;
	for(i = 0; i < n; i ++)
	{
		sum = 0;
		for(j = 0; j < n; j ++)
			sum += c[i][j];
		if(sum % 2 != 0)
		{
			x = i;
			p ++;
		}
			
	}
	for(j = 0; j < n; j ++)
	{
		sum = 0;
		for(i = 0; i < n; i ++)
			sum += c[i][j];
		if(sum % 2 != 0)
		{
			y = j;
			q ++;
		}	
	}
    if(p == 1 && q == 1)
        printf("Change bit(%d,%d)",x,y);
    else
        printf("Corrupt");
}