網路流24題 09 方格取數問題

2022-05-26 01:18:11 字數 1677 閱讀 3497

«問題描述:

在乙個有m*n 個方格的棋盤中,每個方格中有乙個正整數。現要從方格中取數,使任

意2 個數所在方格沒有公共邊,且取出的數的總和最大。試設計乙個滿足要求的取數演算法。

«程式設計任務:

對於給定的方格棋盤,按照取數要求程式設計找出總和最大的數。

«資料輸入:

由檔案grid.in提供輸入資料。檔案第1 行有2 個正整數m和n,分別表示棋盤的行數

和列數。接下來的m行,每行有n個正整數,表示棋盤方格中的數。

«結果輸出:

程式執行結束時,將取數的最大總和輸出到檔案grid.out中。

輸入檔案示例 輸出檔案示例

grid.in

3 31 2 3

3 2 3

2 3 1

grid.out

(1<=n,m<=30)

對於棋盤黑白染色構出一張二分圖,二分圖最大獨立集。

1 #include2 #include3 #include4 #include5 #include6 #include7 #include8

using

namespace

std;

9#define maxn 910

10#define inf 0x7fffffff

11#define llg int

12#define yyj(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);

13 llg n,m,e[maxn],n,p[10][5],g[50][50],k,tot,se[50][50

];14

15struct

dinic

1626

27llg dfs(llg x,llg low)

2838

if (!inc) deep[x]=-1;39

return0;

40}4142

void

fencen()

4357 }while (head!=tail);58}

5960

llg dinic()

6169

return

ans;70}

7172

void

oupt()

7383 printf("\n"

);84}85

}86}g;87

88 llg ma(llg x,llg y)

8990

void

init()

91107

}108

for (llg i=1;i<=n;i++)

109for (llg j=1;j<=m;j++)

110if

(se[i][j])

111118 g.insert(0

,ma(i,j),g[i][j]);

119}

120for (llg i=1;i<=n;i++)

121for (llg j=1;j<=m;j++)

122if (!se[i][j])

123g.insert(ma(i,j),n,g[i][j]);

124}

125126

intmain()

127

網路流24題09方格取數問題

在乙個有 m n 個方格的棋盤中,每個方格中有乙個正整數。現要從方格中取數,使任意 2 個數所在方格沒有公共邊,且取出的數的總和最大。試設計乙個滿足要求的取數演算法。對於給定的方格棋盤,按照取數要求程式設計找出總和最大的數。第 1 行有 2 個正整數 m 和 n,分別表示棋盤的行數和列數。接下來的 ...

網路流24題 13 方格取數問題

這道題與上一道騎士共存問題非常的類似,首先也是黑白染色得到一張二分圖,s向黑連邊,白向t連邊,流量均為點權,然後黑點與會起衝突的白點連邊,那麼如果有一條從s 黑 白 t的路徑,證明有衝突,我們以割掉這條邊 黑點與s的連邊,白點與t連邊 表示拿走這個點,希望剩下的權值最大,所以模型轉換為最小割。求個最...

24題 方格取數問題 網路流

在乙個有 n m n times m n m 個方格的棋盤中,每個方格中有乙個正整數。現要從方格中取數,使任意 2 個數所在方格沒有公共邊,且取出的數的總和最大。這道題明顯是乙個二分圖。我們可以把每個點染色,將i j i ji j為偶數的點連向t tt,否則連向s ss。那麼對於每乙個連s ss的白...