一,看题
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 }