hdu 1198 Farm Irrigation

題目鏈接:

  http://acm.hdu.edu.cn/showproblem.php?pid=1198

題目大意:

  有一大塊土地需要澆水,這塊土地由很多的小塊土地(有十一種)組成,小塊土地上有水溝,問至少需要建幾個井,才能灌溉這一大片土地?

11種土地,編號從A--K,

解題思路:

  這個題目可以用很多種方法,可以用并查集,找出一共有多少個集合,也可以用dfs求連通塊,方法并不難,重在模型的轉化,我用4個0/1數字代表一塊土地,

并查集代碼:

  

 1 #include <stdio.h>
 2 #include <string.h>
 3 #define N 25010
 4 int a[N];
 5 int b[15][5] = {{1,1,0,0},{0,1,1,0},{1,0,0,1},{0,0,1,1,},{0,1,0,1},{1,0,1,0},{1,1,1,0},{1,1,0,1},{1,0,1,1},{0,1,1,1},{1,1,1,1,}};
 6 
 7 int cha (int i)
 8 {
 9     if ( a[i] != i )
10         return cha ( a[i] );
11     return i;
12 }
13 
14 int main ()
15 {
16     int i, j, n, m, num, x, y;
17     char map[55][55];
18     while ( scanf ("%d %d", &n, &m), m > 0 && n > 0 )
19     {
20         for (i=0; i<n; i++)
21         {
22             getchar ();
23             for (j=0; j<m; j++)
24                 scanf ("%c", &map[i][j]);
25         }
26         for (i=0; i<n*m; i++)
27             a[i] =i;
28         for (i=0; i<n; i++)
29             for (j=0; j<m; j++)
30             {
31                 if (i - 1 >= 0)
32                 {
33                     if ( b[ map[i-1][j]-'A' ][3] && b[ map[i][j]-'A' ][1] )
34                     {
35                         x =  cha ( (i-1)*m+j );
36                         y =  cha ( i*m+j );
37                         if (x != y)
38                             a[x] = a[y]; 
39                     }
40                 }
41                 if (j - 1 >= 0)
42                 {
43                     if ( b[ map[i][j-1]-'A' ][2] && b[ map[i][j]-'A' ][0] )
44                     {
45                         x = cha ( i*m+j-1 );
46                         y = cha ( i*m+j );
47                         if (x != y)
48                             a[x] = y;
49                     }
50                 }
51             }
52             num = 0;
53             for (i=0; i<n*m; i++)
54                 if ( a[i] == i )
55                     num ++;
56                 printf ("%d\n", num);
57     }
58     return 0;
59 }

bfs求連通塊代碼:

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<iostream>
 4 #include<algorithm>
 5 using namespace std;
 6 
 7 #define maxn 105
 8 
 9 int G[maxn][maxn], M, N;
10 int v[maxn][maxn];
11 
12 int dir[4][2]={ {-1,0},{0,1},{1,0},{0,-1}};
13 int f[4] = {2, 3, 0, 1};
14 int dir1[11][4] =
15 {
16     {1,0,0,1},{1,1,0,0},{0,0,1,1},{0,1,1,0},
17     {1,0,1,0},{0,1,0,1},{1,1,0,1},{1,0,1,1},
18     {0,1,1,1},{1,1,1,0},{1,1,1,1}
19 };
20 
21 void DFS(int i, int j)
22 {
23     int nx, ny, k;
24 
25     v[i][j] = -1;
26 
27     for(k=0; k<4; k++)
28     {
29         nx = dir[k][0] + i;
30         ny = dir[k][1] + j;
31         int p = f[k];
32         if( nx>=0&&nx<M && ny>=0&&ny<N && !v[nx][ny] && dir1[ G[i][j] ][k] && dir1[ G[nx][ny] ][p])
33         {
34             DFS(nx, ny);
35         }
36     }
37 }
38 
39 int main()
40 {
41     while(scanf("%d%d", &M, &N), M != -1)
42     {
43         int i, j, ans = 0;
44         char ch;
45 
46         memset(v, 0, sizeof(v));
47 
48         for(i=0; i<M; i++)
49         for(j=0; j<N; j++)
50         {
51             cin >> ch;
52             G[i][j] = ch - 'A';
53         }
54 
55         for(i=0; i<M; i++)
56         for(j=0; j<N; j++)
57         {
58             if(v[i][j] == 0)
59             {
60                 DFS(i, j);
61                 ans++;
62             }
63         }
64         cout << ans <<endl;
65     }
66 
67     return 0;
68 }

?

  

轉載于:https://www.cnblogs.com/alihenaixiao/p/4429280.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/259069.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/259069.shtml
英文地址,請注明出處:http://en.pswp.cn/news/259069.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

strcpy_s、sptintf_s與strcat_s的使用

strcpy_s、sptintf_s與strcat_s是strcpy、sptintf與strcat的安全版本&#xff0c;均是通過指定緩沖區長度來避免存在的溢出風險。 strcpy_s 與strcpy strcpy_s和strcpy函數的功能幾乎是一樣的。strcpy函數&#xff0c;就象gets函數一樣&#xff0c;它沒有方法來保證有效的緩沖…

小米一鍵上鎖工具_小米首款高端全自動智能鎖火熱預售中,一觸開啟全自動時代...

近些年&#xff0c;隨著科技的發展&#xff0c;人工智能逐漸走入大眾視野。人類社會也正從信息時代向“智能時代”過渡&#xff0c;在整個過程中智能家居領域的蓬勃發展可謂當仁不讓&#xff0c;一直備受用戶矚目。智能鎖作為家的第一道守護防線&#xff0c;家庭物聯網入口的關…

Eigen+suitesparse for windows 安裝

Eigen是著名的C矩陣運算庫&#xff0c;提供了許多矩陣運算的接口&#xff0c;主要包括兩大部分&#xff0c;一部分是稠密矩陣&#xff0c;另一部分是稀疏矩陣。Eigen以源碼形式提供給大家&#xff0c;用的時候&#xff0c;只要將源碼包含在項目的包含路徑上&#xff0c;具體安裝…

軟件盤控制的問題

2019獨角獸企業重金招聘Python工程師標準>>> 在全屏模式或者是沉寢室標題欄 方案一&#xff1a;全屏模式 1.軟鍵盤被EditText遮擋住了&#xff0c;如果說EditText被嵌套在有滑動的視圖中,采取的方式是: activity中設置此屬性 android:windowSoftInputMode"…

python語言學習零基礎教學視頻_Python告白小白視頻教程(零基礎入門)

1 Python編程基礎入門篇通過本次課程的學習&#xff0c;我們每個人都可以進入python世界里&#xff0c;從簡單到高級&#xff0c;讓人人都能學會python&#xff0c;我們在學習的時候&#xff0c;python讓我們的運維變得更有樂趣&#xff0c;讓我們的運維更加的高大上&#xff0…

SQL 快速入門2.1

MySQL top&#xff08;MySQL limit&#xff09;語法 SELECT column_name(s) FROM table_name LIMIT number 例子 SELECT * FROM Persons LIMIT 5 SQL LIKE 操作符 SQL LIKE 操作符語法 SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern 原始的表 (用在例…

sencha touch 入門系列 (一)sencha touch 簡介

參考鏈接:http://mobile.51cto.com/others-278381.htm Sencha touch 是基于JavaScript編寫的Ajax框架ExtJS,將現有的ExtJS整合JQTouch、Rapha&euml;l庫&#xff0c;推出適用于最前沿Touch Web的移動應用開發框架&#xff0c;該框架是世界上第一個 基于HTML5的Mobile App框架…

求二叉樹的深度和寬度

// 求二叉樹的深度和寬度.cpp : 定義控制臺應用程序的入口點。 <pre name"code" class"cpp">#include <iostream> #include <queue> using namespace std;struct BTNode {char m_value;BTNode *m_left;BTNode *m_right; };//先序創建二叉…

漢堡包

在我們結對的這些天里&#xff0c;我清晰的感受到同伴對我的幫助&#xff0c;每當我有不懂的時候她都會積極的幫助我&#xff0c;也會聽取我的意見積極配合我&#xff0c;在我懶惰的時候也能夠提醒督促我&#xff0c;我想這些只有結對時才能體會到。我們都知道&#xff0c;結對…

zabbix自動發現監控磁盤(iops和讀寫量)

2019獨角獸企業重金招聘Python工程師標準>>> 對于磁盤有個iops的概念比較奇怪&#xff0c;想監控起來看下&#xff0c;利用zabbix的自動發現把每個磁盤的iops監控起來&#xff0c;思路&#xff1a;自動發現所有的磁盤&#xff0c;然后監控各個磁盤的iops。效果如下圖…

一個表單同時向兩個頁面傳值

現在有一個表單<form action"AddNewstu.asp" METHOD"POST" ><INPUT TYPE "Text" NAME "name" SIZE "20"><BR></FORM>此表單向AddNewstu.asp頁面傳入了一個name的值&#xff0c;如果同時把name…

matlab內置函數fitgeotrans與transformPointsForward解析

最近研究3000fps的實現&#xff0c;看了網上給的一個matlab代碼&#xff0c;里面有提到init_shape到mean_shape的對齊&#xff0c;里面使用了fitgeotrans和transformPointsForward兩個函數。于是參考matlab help研究了一下這兩個函數. fitgeotrans函數 語法: tform fitgeotr…

【電腦使用經驗】怎么查看無線網絡中電腦的IP地址?

1、 2、 3、 4、 5、 轉載于:https://www.cnblogs.com/happykoukou/p/4437111.html

win8硬盤安裝Ubuntu14.04雙系統參考教程

硬盤安裝&#xff0c;無需光盤、U盤。win8為主。Ubuntu14.04為輔。可將Windows或Ubuntu設置為開機默認啟動項。在Ubuntu下可查看、操作Windows系統下的文件&#xff1b;適用于安裝和14.04版本號相近的Ubuntu系統。假設以上所述正是你所須要的。那么這可能是一篇您值得參考的教程…

oracle nvarchar2,varchar2,char,nchar說明

char(size)&#xff1a; 數據長度為size&#xff0c;不足的用空格補&#xff0c;超出后報錯。char類型的數據最大長度是2000字節或字符&#xff0c;每個字符長度依賴于數據庫字符集&#xff0c;數據按字符存儲還是字節存儲取決于nls_length_semantics參數。如果每個字符占兩個字…

散列表查找失敗平均查找長度_Python數據結構與算法56:排序與查找:沖突解決方案...

注&#xff1a;本文如涉及到代碼&#xff0c;均經過Python 3.7實際運行檢驗&#xff0c;保證其嚴謹性。本文閱讀時間約為6分鐘。前面說過&#xff0c;如果兩個數據項被散列映射到同一個槽&#xff0c;需要一個系統化的方法在散列表中保存第二個數據項&#xff0c;這個過程被稱為…

Face Alignment by 3000 FPS系列學習總結(一)

廣播&#xff1a; 如今的opencv已經提供了LBF的訓練和測試代碼&#xff0c;推薦閱讀 《使用OpenCV實現人臉關鍵點檢測》 face alignment 流程圖 train階段 測試階段 預處理 裁剪圖片 tr_data loadsamples(imgpathlistfile, 2); 說明&#xff1a; 本函數用于將原始圖片取…

acm常見算法及例題

1 acm常見算法及例題2 3 初期:4 一.基本算法:5 (1)枚舉. (poj1753,poj2965)6 (2)貪心(poj1328,poj2109,poj2586)7 (3)遞歸和分治法.8 (4)遞推.9 (5)構造法.(poj3295)10 (6)模擬法.(poj1068,poj2632,poj1573,poj2993,poj2996)11 二.圖算法…

2爬蟲基礎了解

1.什么是爬蟲爬蟲&#xff0c;即網絡爬蟲&#xff0c;大家可以理解為在網絡上爬行的一直蜘蛛&#xff0c;互聯網就比作一張大網&#xff0c;而爬蟲便是在這張網上爬來爬去的蜘蛛咯&#xff0c;如果它遇到資源&#xff0c;那么它就會抓取下來。想抓取什么&#xff1f;這個由你來…

js(function(){alert(‘’‘)})

function(){alert(sss)}是個匿名函數。沒有名字。所以沒有辦法調用。在外面加個括號&#xff0c;就變成了一個值&#xff0c;值的內容是函數的引用。例如var a (function(){"nop"})a 就是對這個函數的引用。有了名字&#xff0c;之后可以調用&#xff0c;例如a()現在…