TYVJ 1127 统计细胞数 by C++

 1 #include<iostream>
 2 using namespace std;
 3 char a[100][100];
 4 int x[10000];
 5 int y[10000];
 6 bool vis[100][100];
 7 int n=0,m=0,tot=0,stx,sty;
 8 void get_input()
 9 {
10      cin >> n >> m;
11      for (int i=0;i<n;i++)
12          for (int j=0;j<m;j++){ 
13          cin >> a[i][j];
14          vis[i][j]=false;
15          }     
16 }
17 void bfs(int stx,int sty)
18 {
19      int head=0,tail=1,posx,posy,nowx,nowy,prex,prey;
20      tot++;
21      posx=stx;posy=sty;
22      x[1]=posx;y[1]=posy;
23      vis[stx][sty]=true;
24      while (head<tail){
25      head++;
26      head %= 10000;
27      nowx=x[head];nowy=y[head];
28                                prex=nowx-1;prey=nowy;
29                                if (prex>=0){
30                                if (a[prex][prey]!='0'&&!vis[prex][prey])
31                                {vis[prex][prey]=true;
32                                tail++;
33                                tail %= 10000;
34                                x[tail]=prex;y[tail]=prey;}
35                                }
36                                prex=nowx+1;prey=nowy;
37                                if (prex<n){
38                                if (a[prex][prey]!='0'&& !vis[prex][prey])
39                                {vis[prex][prey]=true;
40                                tail++;
41                                tail %= 10000;
42                                x[tail]=prex;y[tail]=prey;}
43                                }
44                                prex=nowx;prey=nowy-1;
45                                if (prey>=0){
46                                if (a[prex][prey]!='0'&& !vis[prex][prey])
47                                {vis[prex][prey]=true;
48                                tail++;
49                                tail %= 10000;
50                                x[tail]=prex;y[tail]=prey;}             
51                                }
52                                prex=nowx;prey=nowy+1;
53                                if (prey<m){
54                                if (a[prex][prey]!='0'&& !vis[prex][prey])
55                                {vis[prex][prey]=true;
56                                tail++;
57                                tail %= 10000;
58                                x[tail]=prex;y[tail]=prey;}            
59                                }
60      } 
61 }
62 int main()
63 {
64     get_input();  
65     for (int i=0;i<n;i++)
66         for (int j=0;j<m;j++){
67         if (a[i][j]!='0'&& !vis[i][j]) bfs(i,j);  
68         }
69     cout << tot <<'\n';
70 }

呃 刚开始用C++ 很多定义不是很熟悉 所以用了最原始的BFS加上最原始的写法,程序无论是写法还是算法没有做任何优化……

过两天我熟悉了C++的时候会回过头来把这个代码精简的。。。

转载于:https://www.cnblogs.com/FreeDestiny/archive/2012/07/02/2573771.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值