搜索练习3
Posted 橘生淮南终洛枳
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了搜索练习3相关的知识,希望对你有一定的参考价值。
P1767 家族_NOI导刊2010普及(10)
题目描述
在一个与世隔绝的岛屿上,有一个有趣的现象:同一个家族的人家总是相邻的(这里的相邻是指东南西北四个方向),不同的家族之间总会有河流或是山丘隔绝,但同一个家族的人不一定有相同姓氏。现在给你岛上的地图,求出岛上有多少个不同的家族。岛上的地图有n行,每行有若干列,每个格子中要么是“ ”,表示大海,要么是“*”,表示河流或山丘,要么是小写字母,表示一户人家的姓氏。
输入输出格式
输入格式:
第一行是个数字N,表示下面信息的行数。接下来是N行字符,每行由小写字母和*号组成,有些行的最前面也可能包含若干连续的空格,表示这些区域是大海,每一行最多不超过200个字符。
输出格式:
一个数字,表示家族数。
输入输出样例
说明
10%的数据,n≤1。 30%的数据,n≤10。 100%的数据,n≤100每一行最多不超过200个字符。
_NOI导刊2010普及(10)
Solution:
每次做字符串的问题一定会被输入坑,cin忽略空格。。。 gets会读入换行符。。。。
还有这个题目本身的搜索是最基本的搜索,然而我却在输入处理上被坑了好久。。。。(代码注释部分为什么错了?)
对于搜索的边界仔细考虑。。
Code:
#include<queue> #include<cstdio> #include<cstring> #include<iostream> using namespace std; int n,map[110][233],mxn,vis[110][233],ans; char ch[110][233]; int dx[4]= {0,0,1,-1}, dy[4]= {1,-1,0,0}; //东西南北 struct Node { int x,y; } now,nxt; queue<Node>q; void bfs(int x,int y) { now.x = x, now.y = y; q.push(now); vis[now.x][now.y]=1; while(!q.empty()) { now=q.front(); q.pop(); for(int i=0; i<4; i++) { nxt.x=now.x+dx[i], nxt.y=now.y+dy[i]; if(nxt.x<=0 || nxt.x>n || nxt.y<=0 || nxt.y>mxn) continue; if(!vis[nxt.x][nxt.y] && map[nxt.x][nxt.y]) { q.push(nxt); vis[nxt.x][nxt.y]=1; } } } } int main() { scanf("%d",&n); for(int i=0; i<=n; i++) { gets(ch[i]); if(i==0) continue; int lenc=strlen(ch[i]); for(int j=0; j<lenc; j++) { // if(ch[i][j]==‘*‘ || ch[i][j]==‘ ‘) map[i][j+1]=0; // else map[i][j+1]=1; if(‘a‘<=ch[i][j] && ch[i][j]<=‘z‘) map[i][j+1]=1; } mxn=max(mxn,lenc); } for(int i=1; i<=n; i++) for(int j=1; j<=mxn; j++) if(map[i][j] && !vis[i][j]) { bfs(i,j); ans++; } printf("%d",ans); return 0; }
自己选的路,跪着也要走完!!!
以上是关于搜索练习3的主要内容,如果未能解决你的问题,请参考以下文章
spring练习,在Eclipse搭建的Spring开发环境中,使用set注入方式,实现对象的依赖关系,通过ClassPathXmlApplicationContext实体类获取Bean对象(代码片段
Python练习册 第 0013 题: 用 Python 写一个爬图片的程序,爬 这个链接里的日本妹子图片 :-),(http://tieba.baidu.com/p/2166231880)(代码片段
《安富莱嵌入式周报》第279期:强劲的代码片段搜索工具,卡内基梅隆大学安全可靠C编码标准,Nordic发布双频WiFi6 nRF7002芯片