【可怕】乔酱的2416攻占计划!
2017-11-07 19:25
232 查看
乔酱的2416攻占计划
题目描述
乔酱近日闲来无事,玩起了服务器自我攻防,可是他发现自己的服务器漏洞在哪,自己的病毒怎么杀,自己都清楚啊。哎,还是太无聊,于是他盯上了机房的电脑。
假设乔酱有一种病毒,该病毒除了能感染投入的电脑外,还能转移到邻近的(东南西北四个方向)处于开机状态的电脑中,将其感染,如果机房所有的电脑都开着,那么乔酱只需要一个病毒就能完成攻占,可怕!
输入
有多组案例,每个案例开始一行输入两个整数n、m(0 < n,m<=20),表示机房的电脑共有n行,m列,接下来有n行m列的1或者0,表示每台电脑处于开机状态或者关机状态。
输出
对应每个案例,输出一个整数k,k为乔酱的感染该机房处于开机状态的电脑所需的最小病毒数,每个案例后输出一个空行。
样例输入
5 5
1 1 0 0 1
1 0 0 0 1
0 0 1 0 1
1 0 0 1 0
1 1 0 0 0
3 3
1 1 1
1 1 1
1 1 1
样例输出
5
1
代码:
题目描述
乔酱近日闲来无事,玩起了服务器自我攻防,可是他发现自己的服务器漏洞在哪,自己的病毒怎么杀,自己都清楚啊。哎,还是太无聊,于是他盯上了机房的电脑。
假设乔酱有一种病毒,该病毒除了能感染投入的电脑外,还能转移到邻近的(东南西北四个方向)处于开机状态的电脑中,将其感染,如果机房所有的电脑都开着,那么乔酱只需要一个病毒就能完成攻占,可怕!
输入
有多组案例,每个案例开始一行输入两个整数n、m(0 < n,m<=20),表示机房的电脑共有n行,m列,接下来有n行m列的1或者0,表示每台电脑处于开机状态或者关机状态。
输出
对应每个案例,输出一个整数k,k为乔酱的感染该机房处于开机状态的电脑所需的最小病毒数,每个案例后输出一个空行。
样例输入
5 5
1 1 0 0 1
1 0 0 0 1
0 0 1 0 1
1 0 0 1 0
1 1 0 0 0
3 3
1 1 1
1 1 1
1 1 1
样例输出
5
1
代码:
#include <stdio.h> #include <string.h> #define MAXN 30 int Map[MAXN][MAXN]; int m,n; void dfs(int x,int y) //深度优先搜索,调用递归 { if(Map[x][y]==1&&x>=0&&x<m&&y>=0&&y<n) { Map[x][y]=0; //关闭这台电脑,并检查周围的电脑 dfs(x-1,y); dfs(x,y-1); dfs(x+1,y); dfs(x,y+1); } return ; } int main() { while(scanf("%d%d",&m,&n)!=EOF) { memset(Map,0,sizeof(Map));//数组初始化 int virus=0; for(int i=0;i<m;i++) //for循环镶嵌,一般在一个量变化时,另一个量发生一整套变化时使用 { for(int j=0;j<n;j++) { scanf("%d",&Map[i][j]); //自定义开机的电脑 } } for(int i=0;i<m;i++) //从第一行以一个开始,只要有开机的电脑就用病毒攻占,一次往下判断,最后使用的病毒数,就是要输出的病毒数 { for(int j=0;j<n;j++) { if(Map[i][j]) //如果电脑开机 { dfs(i,j); virus++; //只要有开机的电脑,就用病毒攻占 } } } printf("%d\n\n",virus); } return 0; }
相关文章推荐
- FZU2210-攻占计划
- FZU 2210 攻占计划(思维题)
- FOJ有奖月赛-2015年11月 Problem F 攻占计划
- 【总结+计划】七八月份总结+九月份计划——未知的状态最可怕
- HELPER2416开发板学习计划
- FOJ有奖月赛-2015年11月-Problem F 攻占计划
- 【FOJ2210 11月月赛F】【DFS or 拓扑排序】攻占计划 n个点m条边DAG破坏一个点使得不可达点数尽可能多
- fzu 2210 攻占计划 图论 dfs
- FOJ有奖月赛-2015年11月 Problem F 攻占计划
- FZOJ 2210 - 攻占计划
- FOJ有奖月赛-2015年11月 Problem F 攻占计划
- Mysql的执行计划explain
- Windows 任务计划 隐藏执行窗口的几种方法
- 回归老本行 - 下学期学习计划
- linux下的任务计划进程crontab命令详解
- 雁栖湖健身计划
- “吃神么,买神么”的第一个Sprint计划(第五天)
- 计划和小结
- 3.主生产计划的对象