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++的时候会回过头来把这个代码精简的。。。

posted @ 2012-07-02 22:10  NoRush  阅读(910)  评论(0编辑  收藏  举报