我正在尝试测试许多用于扫雷游戏的测试用例 它导致infinte循环,我没有得到输出
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m;
cin>>n>>m ;
//cout<<"bug1";
char grid[n+2][m+2] ;
string numbers="0123456789" ;
memset(grid,'0',sizeof grid);
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
cin>>grid[i][j];
//cout<<"bug2";
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(grid[i][j]!='*'){
int counter=0;
for(int ii=i-1;ii<i+2;ii++){
for(int jj=j-1;j<j+2;jj++){
if(ii>=0 && jj>=0 && grid[ii][jj]=='*')
counter++;
}
}
grid[i][j]=numbers[counter];
}
}
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cout<<grid[i][j] ;
}
cout<<endl ;
}
return 0;
}
我试试这个测试用例
它导致infinte循环所以...解决方案是什么?
答案 0 :(得分:6)
j<j+2 // in for(int jj=j-1;j<j+2;jj++){
始终为true,结果是无限循环。
考虑到您对变量的选择,使用real
,count
等total
变量是有意义的:
i,n,j,m,ii,jj // No wonder if someone is not confused with this.
仅举几例。