NYOJ-题目27 水池数目
来源:互联网 发布:python time.sleep修改 编辑:程序博客网 时间:2024/05/29 05:56
http://acm.nyist.net/JudgeOnline/problem.php?pid=27
程序代码(一):时间 8 内存 272
#include
#define N 102
#define M 102
int map[N][M] = {0};
void search(int i,int j)//递归调用,将是 1 的 连续地方 全部 变为 0
{
if(map[i][j-1]) { map[i][j-1]=0;search(i,j-1); }
if(map[i][j+1]) { map[i][j+1]=0;search(i,j+1); }
if(map[i-1][j]) { map[i-1][j]=0;search(i-1,j); }
if(map[i+1][j]) { map[i+1][j]=0;search(i+1,j); }
}
int main()
{
int t,n,m;
int i,j,count;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
count=0;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
scanf("%d",&map[i][j]);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(map[i][j])
{
count++;
map[i][j]=0;
search(i,j);
}
printf("%d\n",count);
}
return 0;
}
程序代码(二):时间 4 内存308
#include
#include
intmap[100][100],vis[100][100];//这里定义两个数组同时搜索,时间少,但消耗内存大
intn,m;
voiddfs(int i,int j)
{
vis[i][j]=1;
if(map[i-1][j]&&!vis[i-1][j])
{
vis[i-1][j]=1;
dfs(i-1,j);
}
if(map[i+1][j]&&!vis[i+1][j])
{
vis[i+1][j]=1;
dfs(i+1,j);
}
if(map[i][j-1]&&!vis[i][j-1])
{
vis[i][j-1]=1;
dfs(i,j-1);
}
if(map[i][j+1]&&!vis[i][j+1])
{
vis[i][j+1]=1;
dfs(i,j+1);
}
}
intmain()
{
inti,j,sum,t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&m,&n);
memset(vis,0,sizeof(vis));
memset(map,0,sizeof(map));
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
scanf("%d",&map[i][j]);
sum=0;
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
if(!vis[i][j]&&map[i][j])
{
sum++;
dfs(i,j);
}
printf("%d\n",sum);
}
return 0;
}
程序代码(三):时间 0 内存248
#include
#include
char map[100][100],vis[100][100];//这里把数组定义成字符型数组,来存放整型数,减少了内现存和时间
int n,m;
void dfs(int i,int j)
{
vis[i][j]=1;
if(map[i-1][j]&&!vis[i-1][j])
{
vis[i-1][j]=1;
dfs(i-1,j);
}
if(map[i+1][j]&&!vis[i+1][j])
{
vis[i+1][j]=1;
dfs(i+1,j);
}
if(map[i][j-1]&&!vis[i][j-1])
{
vis[i][j-1]=1;
dfs(i,j-1);
}
if(map[i][j+1]&&!vis[i][j+1])
{
vis[i][j+1]=1;
dfs(i,j+1);
}
}
int main()
{
int i,j,sum,t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&m,&n);
memset(vis,0,sizeof(vis));
memset(map,0,sizeof(map));
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
scanf("%d",&map[i][j]);
sum=0;
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
if(!vis[i][j]&&map[i][j])
{
sum++;
dfs(i,j);
}
printf("%d\n",sum);
}
return 0;
}
0 0
- NYOJ-题目27 水池数目
- nyoj 题目27 水池数目
- NYOJ---题目27水池数目
- nyoj 27 水池数目
- NYOJ 题目27 水池数目(dfs)
- NYOJ--27(搜索)-题目-----------------------------水池数目
- NYOJ题目27-水池数目(搜索)
- NYOJ 27 水池数目
- NYOJ-27:水池数目
- NYOJ 27 水池数目
- NYOJ-27 水池数目
- nyoj-27-水池数目
- NYOJ 27-水池数目
- NYOJ 27 水池数目
- NYOJ 27 水池数目
- nyoj 27 水池数目
- 水池数目(NYOJ 27)
- nyoj-27-水池数目
- VS2012简单的使用感受+插件推荐【转】
- NYOJ-题目221 Tree
- NYOJ—题目88 找球号(一)
- 二叉平衡树
- 无向图的邻接表创建以及图的深度和…
- NYOJ-题目27 水池数目
- <将博客搬至CSDN>
- HeadFirst 设计模式-观察者模式
- 【备忘】Linux, Shell 常用命令,不定时更新
- VS 2005 beta2 到 正式版 升级后的问题。
- 逆波兰表达式算法
- Linux下常用文本处理命令
- CEdit 清空、设置多行显示
- 使用包装设计模式,实现标准连接池