日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

UVA11464偶数矩阵

發布時間:2025/6/17 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 UVA11464偶数矩阵 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題意:
? ? ? 給你一個n*n的01矩陣,你的你的任務是吧盡量少的0變成1,使得每個元素的上下左右之和均為偶數(如果有的話),比如
0 0 0 ? ? ? ? 0 1 0
1 0 0 ?---> ? 1 0 1 ??
0 0 0 ? ? ? ? 0 1 0
是變換了3個。


思路:
? ? ? 這個題目拿到手的最暴力的反應就是直接搜索枚舉所有,那么時間復雜度是
O(2^(15*15))直接就跪了,其實這個題目有個很關鍵的突破口,就是只要第一行確定了,那么其他的都是確定的,這個可以自己找幾個矩陣試驗下,所以我們可以直接深搜去枚舉第一行,然后根據第一行吧所有的都填充完,看看有沒有沖突,如果沒有就更新答案的最優值,這樣的時間復雜度是O(2^15*15*15) = O(32768 * 225)沒啥大壓力。




? ? ?




#include<stdio.h>


int map[16][16] ,now[16][16];
int Ans ,n;


void DFS(int noww)
{
? ?if(noww == n + 1)
? ?{
? ? ? int tmp = 0;?
? ? ? for(int i = 1 ;i <= n ;i ++)
? ? ? if(!map[1][i] && now[1][i]) tmp ++; ??
? ? ? for(int i = 2 ;i <= n ;i ++)
? ? ? for(int j = 1 ;j <= n ;j ++)
? ? ? {
? ? ? ? ? int ss = 0 ,nowi = i - 1 ,nowj = j;
? ? ? ? ? if(nowi >= 2) ss += now[nowi-1][j];
? ? ? ? ? if(nowj >= 2) ss += now[nowi][j-1];
? ? ? ? ? if(nowj <= n-1) ss += now[nowi][j+1];
? ? ? ? ? now[i][j] = ss % 2;
? ? ? ? ? if(!map[i][j] && now[i][j]) tmp ++;
? ? ? ? ? if(map[i][j] && !now[i][j]) return;
? ? ? }
? ? ? if(Ans == -1 || Ans > tmp) Ans = tmp;
? ? ? return;
? ?}
? ?
? ?now[1][noww] = 1;
? ?DFS(noww+1);
? ?if(!map[1][noww])
? ?{
? ? ? ?now[1][noww] = 0;
? ? ? ?DFS(noww+1);
? ?}
}


int main ()
{
? ? int i ,j ,t ,cas = 1;
? ? scanf("%d" ,&t);
? ? while(t--)
? ? {
? ? ? ?scanf("%d" ,&n);
? ? ? ?for(i = 1 ;i <= n ;i ++)
? ? ? ?for(j = 1 ;j <= n ;j ++)
? ? ? ?scanf("%d" ,&map[i][j]);
? ? ? ?Ans = -1;
? ? ? ?DFS(1);
? ? ? ?printf("Case %d: %d\n" ,cas ++ ,Ans);
? ? }
? ? return 0;
}
? ? ??

總結

以上是生活随笔為你收集整理的UVA11464偶数矩阵的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。