q1096

一,看题

1,大概是每个点都来一次BFS标记下应该就可以。

2,你可以想想队列为啥pop()是l++;

3,还是字符你得注意下。

4,x,y,m,n,行列你得搞清楚。

5,这棋盘的破东西。。

6,额,字符的比较不该用strcmp么

7,我都觉得不需要bfs那样,都行。

但是可以的话练一下bfs的模板。

8,bfs也可以有两种情况,

有返回值的和没有返回值的。

9,注意字符数组,你往进存的话要注意。

10,样例都能过,这个运行错误我也是。。

11,昨天是一个return 。。写错了改写成continue的。

(这代码折叠啥的我还真玩不了)

12,至少从我测试来看,

memset在<cstring>中。

 1 #include<iostream>
 2 #include<cstring>
 3 using namespace std;
 4 int n,m;
 5 int cnt;
 6 char board[100000][100000];
 7 int dx[]={1,-1,0,0,1,-1,1,-1};
 8 int dy[]={0,0,1,-1,1,1,-1,-1};
 9 void bfs(int x,int y)
10 {
11     cnt=0;
12     if(board[x][y]=='*') return ;
13     for(int i=0;i<=7;i++)
14     {
15         int xx=x+dx[i];
16         int yy=y+dy[i];
17         if(xx<1||yy<1||xx>n||yy>m) continue;
18         if(board[xx][yy]=='*') cnt++;
19      } 
20     board[x][y]=cnt+'0';
21     
22 }
23 int main(){
24     int k=1;
25     while(cin>>n>>m)    
26     {
27         for(int i=1;i<=n;i++)
28             for(int j=1;j<=m;j++)
29                 cin>>board[i][j];
30         for(int i=1;i<=n;i++)
31             for(int j=1;j<=m;j++)
32                 bfs(i,j);
33         cout<<"Field #"<<k<<":"<<endl;
34         for(int i=1;i<=n;i++)
35             for(int j=1;j<=m;j++)
36                 {
37                     cout<<board[i][j];
38                     if(j==m)
39                         cout<<"
";
40                  } 
41         cout<<"
";
42         k++;    
43     }
44     memset(board,0,sizeof(board));
45     
46 } 
原文地址:https://www.cnblogs.com/beiyueya/p/12077690.html