暴力列舉- uva11464 - Even Parity
題目:
給你一個n×n的01矩陣(每個元素非0即1),你的任務是把儘量少的0變成1,使得每個元素的上、下、左、右的元素(如果存在的話)之和均為偶數。比如,如(a)所示的矩陣至少要把3個0變成1,最終如圖(b)所示,才能保證其為偶數矩陣。
輸入的第一行為資料組數T(T≤30)。每組資料的第一行為正整數n(1≤n≤15);接下來的n行每行包含n個非0即1的整數,相鄰整數間用一個空格隔開。
對於每組資料,輸出被改變的元素的最小個數。如果無解,應輸出-1。
分析:
1、顯然列舉每一位是不現實的,注意到n只有15,那麼可以列舉第一行,接下來根據第一行就可以計算出第二行,根據第二行又能計算出第三行,以此類推。
程式碼:
#include <cstdio>
#define M 20
int n, Min, a[M][M], b[M][M];
int check(int x, int y)//將其上左右三面的值相加
{
int sum = 0;
if(x-1>=0) sum += b[x-1][y];
if(y-1>=0) sum += b[x][y-1];
if(y+1<n) sum += b[x][y+1];
return sum%2;//如果是偶數就返回0,奇數就返回1
}
void dfs(int cur)
{
//利用深度優先遍歷列舉第一行
if(cur!=n)
{
b[0][cur] = 1;
dfs(cur+1);
b[0][cur] = 0;
dfs(cur+1);
}
else//列舉完之後開始遞推下面每一行的情況
{
for(int i = 1; i < n; i++)
for(int j = 0; j < n; j++)
b[i][j] = check(i-1,j);
int cou = 0;
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
if(a[i][j]==1&&b[i][j]==0)
return;//題目只能把0變1,不能把1變0,所以直接結束。
else if(a[i][j]==0&&b[i][j]==1)
cou++;//只有當出現原來為0,列舉出的結果中為1的情況,cou才+1
if(Min>cou)
Min = cou;
return;
}
}
int main ()
{
int cas, t = 0;
scanf("%d",&cas);
while(t++<cas)
{
scanf("%d",&n);
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
scanf("%d",&a[i][j]);
Min = 1e9;
dfs(0);//開始列舉;
printf("Case %d: ",t);
if(Min==1e9)
printf("-1\n");
else
printf("%d\n",Min);
}
return 0;
}
相關文章
- UVA 11464 Even Parity(部分列舉 遞推)
- (UVA - 10976)Fractions Again?!(技巧,暴力列舉)FractionAI
- UVA 11464-Even Parity(偶數矩陣-開關問題)矩陣
- Codeforces 626D Jerry's Protest(暴力列舉+概率)
- POJ 3080 Blue Jeans (KMP+暴力列舉)【模板】KMP
- (桶暴力列舉gcd) CF1627D Not AddingGC
- 6343 密碼鎖 CSP-S 2023年 暴力列舉密碼
- 5211 導彈攔截 普及組 NOIP2010 暴力列舉
- Java 列舉、JPA 和 PostgreSQL 列舉JavaSQL
- 列舉和列舉的取值範圍
- Java列舉Java
- Swift,列舉Swift
- Sort Array By Parity
- 9.3 parity概述
- jQuery :evenjQuery
- C# 列舉與位列舉概述C#
- 列舉工具類
- TypeScript 列舉enumTypeScript
- Java 列舉(enum)Java
- Swift-列舉Swift
- 自定義列舉
- java列舉類Java
- TypeScript 列舉指南TypeScript
- Java列舉使用Java
- C#:列舉C#
- 列舉程式 (轉)
- 列舉比較
- 列舉型別型別
- Java列舉-通過值查詢對應的列舉Java
- Java enum列舉類詳解 列舉的常見用法Java
- C/C++列舉enum分別列印輸出列舉子和列舉值的方法C++
- ENUM列舉型別型別
- Java基礎--列舉Java
- 【java基礎】列舉Java
- Java(4)列舉類Java
- 【java】【列舉使用技巧】Java
- Java列舉解讀Java
- java列舉型別Java型別