数细胞-swust oj
数细胞(0964)
一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。编程需要用到的队列及其相关函数已经实现,你只需要完成count函数以及主函数即可。
第一行输入两个整数,分别代表矩阵的行和列 输入m*n的矩阵,由数字0到9组成。
细胞个数。
#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
int m, n;
int go[][] = { { -, }, { , }, { , }, { , - } };//定义方向数组:上下左右
int map[][];
void dfs(int x, int y)//遍历
{
map[x][y] = ;//之前把这里写成了map[x][y]='0';真是傻了,调了半天才调出来
for (int i = ; i <= ; i++)//上下左右
{//之前把这里写成了八个方向,所以怎么交都不对 int gx = x + go[i-][];//左右
int gy = y + go[i-][];//上下
if (gx >= && gx < m&&gy >= && gy < n&&map[gx][gy] != )//在范围内,并且当前为细胞
{
dfs(gx, gy);//遍历某个区域
}
}
}
int main()
{ int i, j, k=;
cin >> m >> n;
{
for (i = ; i < m; i++)
{
for (j = ; j < n; j++)
{
cin >> map[i][j];//输入地图
}
}
for (i = ; i < m; i++)
{
for (j = ; j < n; j++)
if (map[i][j] != )//初始
{
k++;
dfs(i, j);//遍历
}
}
cout << k ;
}
return ;
}
这是第二种不同的写法,稍微麻烦了点:
#include<iostream>
using namespace std;
#define max 100
int m, n, str[max][max];
void Input()
{
int i, j;
cin >> m >> n;
for (i = ; i<m; i++)
{
for (j = ; j<n; j++)
{
cin >> str[i][j];
}
}
}
bool exist(int x, int y)
{
if (x >= && x<m&&y >= && y<n)
return true;
else
return false;
} void DFS(int x, int y)
{
int tx, ty, i;
str[x][y] = ;
for (i = ; i<; i++)
{
if (i == )
{
tx = x - ;
ty = y;
if (exist(tx, ty))
{
if (str[tx][ty] != )
{
DFS(tx, ty);
}
}
}
else
if (i == )
{
tx = x + ;
ty = y;
if (exist(tx, ty))
{
if (str[tx][ty] != )
{
DFS(tx, ty);
}
}
}
else
if (i == )
{
tx = x;
ty = y + ;
if (exist(tx, ty))
{
if (str[tx][ty] != )
{
DFS(tx, ty);
}
}
}
else
if (i == )
{
tx = x;
ty = y - ;
if (exist(tx, ty))
{
if (str[tx][ty] != )
{
DFS(tx, ty);
}
}
}
}
}
int main()
{
int i, j, count = ;
Input();
for (i = ; i<m; i++)
{
for (j = ; j<n; j++)
{
if (str[i][j] != )
{
count++;
DFS(i, j);
}
}
}
cout << count;
return ;
}
DFS
#include<iostream>
using namespace std;
const int maxnum = + ;
int map[maxnum][maxnum];
int visit[maxnum][maxnum];//判断是否访问过
int dis[][] = { { -, }, { , }, { , }, { , - } };//方向数组
int M, N;
void DFS(int x,int y)
{
int i;
int dx, dy;
for (i = ; i < ; i++)
{
dx = x + dis[i][];
dy = y + dis[i][];
if (dx < M&&dx >= && dy < N&&dy >= && visit[dx][dy]== )//判断是否越界 并且没访问过
{
visit[dx][dy] = ;//节点已经访问
DFS(dx,dy);//继续遍历
}
} }
int main()
{
int i,j;
int cnt = ;
memset(map, , sizeof(map));
memset(visit, , sizeof(visit));
cin >> M >> N;
for (i = ; i < M;i++)
for (j = ; j < N; j++)
{
cin >> map[i][j];
}
for (i = ; i < M; i++)
{
for (j = ; j < N; j++)
{
if (map[i][j]!=&& (visit[i][j]==))
{
visit[i][j] = ;
DFS(i, j);
cnt++;
}
}
}
cout << cnt << endl; return ;
}
数细胞-swust oj的更多相关文章
- [Swust OJ 404]--最小代价树(动态规划)
题目链接:http://acm.swust.edu.cn/problem/code/745255/ Time limit(ms): 1000 Memory limit(kb): 65535 Des ...
- SWUST OJ NBA Finals(0649)
NBA Finals(0649) Time limit(ms): 1000 Memory limit(kb): 65535 Submission: 404 Accepted: 128 Descri ...
- [Swust OJ 649]--NBA Finals(dp,后台略(hen)坑)
题目链接:http://acm.swust.edu.cn/problem/649/ Time limit(ms): 1000 Memory limit(kb): 65535 Consider two ...
- [Swust OJ 797]--Palindromic Squares(回文数水题)
题目链接:http://acm.swust.edu.cn/problem/797/ Time limit(ms): 1000 Memory limit(kb): 10000 Description ...
- [Swust OJ 610]--吉祥数
题目链接:http://acm.swust.edu.cn/problem/610/ Time limit(ms): 1000 Memory limit(kb): 65535 Description ...
- [Swust OJ 137]--波浪数(hash+波浪数构造)
题目链接:http://acm.swust.edu.cn/problem/137/ Time limit(ms): 1000 Memory limit(kb): 65535 Description ...
- [Swust OJ 566]--开N方数(牛顿切线法解高次方程)
题目链接:http://acm.swust.edu.cn/problem/0566/ Time limit(ms): 1000 Memory limit(kb): 65535 Descriptio ...
- [Swust OJ 403]--集合删数
题目链接:http://acm.swust.edu.cn/problem/403/ Time limit(ms): 5000 Memory limit(kb): 65535 Description ...
- [Swust OJ 1125]--又见GCD(数论,素数表存贮因子)
题目链接:http://acm.swust.edu.cn/problem/1125/ Time limit(ms): 1000 Memory limit(kb): 65535 Descriptio ...
随机推荐
- [机房练习赛7.26] YYR字符串
1 无尽的矩阵(matrix.c/cpp/pas) 1.1 题目描述 从前有一个的小矩阵,矩阵的每个元素是一个字母(区分大小写),突然有一天它发生了变异,覆盖了整个二维空间,即不停自我复制产生相同 ...
- PE格式第九讲,资源表解析
PE格式第九讲,资源表解析 一丶熟悉Windows管理文件的方法 首先,为什么标题是这个,主要是为了下边讲解资源方便,因为资源结构体很乱.如果直接拿出来讲解,那么就会很晕. 1.windows管理文件 ...
- vue-cli中如何引入jquery
前言 虽然vue不推荐直接操作DOM,而且也提供了操作DOM的方式.但是在某些时候还是要用到jquery(囧),那么如何在使用vue-cli的时候引入jquery呢? 安装 国内镜像 cnpm 安装 ...
- ELK系列~对fluentd参数的理解
这段时候一直在研究ELK框架,主要集成在对fluentd和nxlog的研究上,国内文章不多,主要看了一下官方的API,配合自己的理解,总结了一下,希望可以帮到刚入行的朋友们! Fluentd(日志收集 ...
- Java基础总结--常用类以及包的访问权限
-----Object---所有类的根类1.怎么得到的:通过对所有对象不断的向上抽取共性,具备所有对象的共性的东西2.常用的方法* equals(Object obj):比较两个对象的引用是否指向同一 ...
- oracle赋值问题(将同一表中某一字段赋值给另外一个字段的语句)
将同一表中某一字段赋值给另外一个字段的语句update jxc_ckmx ckmx1 set ckmx1.ddsl = (select ckmx2.sl from jxc_ckmx ckmx2 whe ...
- 数据模型(LP32 ILP32 LP64 LLP64 ILP64 )
数据模型(LP32 ILP32 LP64 LLP64 ILP64 ) 32位环境涉及"ILP32"数据模型,是因为C数据类型为32位的int.long.指针.而64位环境使用不同的 ...
- poj 3340 Barbara Bennett's Wild Numbers(数位DP)
Barbara Bennett's Wild Numbers Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 3153 A ...
- Azkaban 2.5.0 搭建和一些小问题
安装环境: 系统环境: ubuntu-12.04.2-server-amd64 安装目录: /usr/local/ae/ankaban JDK 安装目录: export JAVA_HOME=/usr/ ...
- python基础知识——基于python3.6
语法糖 # # -*- coding: utf-8 -*- # #------------- # #--------- 语法糖--------------- # #------------------ ...