码迷,mamicode.com
首页 > 其他好文 > 详细

【codevs】2919 选择题

时间:2017-02-26 12:16:29      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:水题   lock   com   nbsp   start   main   code   http   深搜   

又来放水题了,毕竟我只会水题...

以前写的一道水题...

网址:http://codevs.cn/problem/2919/

题目:

大意:从一个给定的点往四个方向找相同的点,统计这些点的个数

技术分享

看题目再看样例,嗯,宽搜 or 深搜

然而我无聊透了,想用并查集打一下...

思路:全部都搜一遍,如果上面或左面的与目前的点一致,那么就合为一点,最后在找一遍,如果与给定点是同一点的,那么就答案++.

代码如下:

技术分享
 1 //并查集
 2 #include<iostream>
 3 
 4 #include<cstdio>
 5 
 6 using namespace std;
 7 
 8 int f[500]={0};
 9 
10 int find(int x){
11 
12     while(f[x]!=x)x=f[x];
13 
14     return x;
15 
16 }
17 
18 int main(){
19 
20     int n,m,x,y,b,b1,c,k=0;
21 
22     char a[20][20];
23 
24     scanf("%d%d%d%d",&n,&m,&x,&y);
25 
26     for(b=1;b<=n;b++)
27 
28         for(b1=1;b1<=m;b1++)
29 
30             cin>>a[b][b1];
31 
32     for(b=1;b<=n*m;b++)f[b]=b;
33 
34     for(b=1;b<=n;b++)
35 
36         for(b1=1;b1<=m;b1++){
37 
38                 if(a[b][b1]==a[b-1][b1])f[find((b-1)*m+b1)]=find((b-2)*m+b1);//上面相同合为一点
39 
40                 if(a[b][b1]==a[b][b1-1])f[find((b-1)*m+b1)]=find((b-1)*m+b1-1);//左面相同合为一点
41 
42         }
43 
44     c=find((x-1)*m+y);//选项是哪一点
45 
46     for(b=1;b<=n*m;b++){
47 
48         if(f[find(b)]==c)k++;//那个选项与题目所求的选项是一点,答案++
49 
50     }
51 
52     cout<<k<<endl;
53 
54 }
选择题

水题一道...

之所以用并查集是因为认为宽搜打的多,深搜比较慢

然而数据太水...并查集打的也不少...

就当练练并查集...

 

然而又写完一篇博客...

 

【codevs】2919 选择题

标签:水题   lock   com   nbsp   start   main   code   http   深搜   

原文地址:http://www.cnblogs.com/huangjingwen/p/6443833.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!