hdu 1198Farm Irrigation
来源:互联网 发布:淘宝首页html代码示例 编辑:程序博客网 时间:2024/04/23 15:08
水管游戏 本题题意是有11种水管 任意摆放 问建多少井能灌满所有管道
关键是水管的预处理 用深搜和并查集都行
我写的是深度搜索 并查集不太会
#include <iostream>#include <cstring>#include <cstdio>using namespace std;int n,m;char str[52][52];int flag[52][52];int a[][4]={ {1,1,0,0},{1,0,0,1},{0,1,1,0},{0,0,1,1}, {1,0,1,0},{0,1,0,1},{1,1,0,1},{1,1,1,0},{0,1,1,1}, {1,0,1,1},{1,1,1,1}};//预处理int b[][2]={-1,0,0,-1,1,0,0,1};int sum;void dfs(int x,int y){ flag[x][y]=1; for(int i = 0; i < 4; i++) { if(a[str[x][y]-'A'][i]) { int nx = x+b[i][0]; int ny = y+b[i][1]; if(nx < 0 || ny < 0 || nx >= m || ny >= n) continue; switch(i) { case 0:if(a[str[nx][ny]-'A'][2] && !flag[nx][ny]) dfs(nx,ny); break; case 1:if(a[str[nx][ny]-'A'][3] && !flag[nx][ny]) dfs(nx,ny); break; case 2:if(a[str[nx][ny]-'A'][0] && !flag[nx][ny]) dfs(nx,ny); break; case 3:if(a[str[nx][ny]-'A'][1] && !flag[nx][ny]) dfs(nx,ny); break; }//四个方向一次判断是否搜索 } }}int main(){ while(~scanf("%d%d",&m,&n)&&m>0&&n>0){ memset(flag,0,sizeof(flag)); sum=0; for(int i=0; i<m; i++) scanf("%s",str[i]); for(int i=0; i<m; i++) for(int j=0; j<n; j++){ if(!flag[i][j]){ sum++; dfs(i,j); } } cout<<sum<<endl; } return 0;}
0 0
- HDU 1198 Farm Irrigation
- hdu 1198 Farm Irrigation
- hdu 1198 Farm Irrigation
- HDU--1198Farm Irrigation
- hdu 1198 Farm Irrigation
- HDU 1198-Farm Irrigation
- HDU 1198 Farm Irrigation
- hdu 1198 Farm Irrigation
- hdu 1198 Farm Irrigation
- HDU 1198 Farm Irrigation
- HDU 1198 Farm Irrigation
- HDU 1198 Farm Irrigation
- hdu 1198 Farm Irrigation
- hdu 1198 Farm Irrigation
- hdu 1198 Farm Irrigation
- hdu 1198 Farm Irrigation
- hdu(1198)Farm Irrigation
- hdu 1198 Farm Irrigation
- 素数筛选 模版
- 线程 ,生产者. 消费者 互斥锁,条件变量
- 导航控制器---UINavigationController
- 加密算法比较3DES AES RSA ECC MD5 SHA1等
- html与css经典二级菜单编写2
- hdu 1198Farm Irrigation
- 常用的正则表达式大全
- android的camera
- Java基础----一其他类的总结(一)
- Edittext请求输入法无效的解决方案
- IK Analyzer 2012FF_hf1使用
- HDU 题目分类 很有层级 感觉很好
- 一个码农对软件项目基层人员管理的思考——会议篇
- hdu 1022 Train Problem I