1 #include2 #include 3 #include 4 using namespace std; 5 6 int IsVis[26][26];//记录位置是否被访问 7 char Eagles[26][26]; 8 typedef struct node 9 {10 int x,y;11 }War;12 int Move[8][2]={-1,0, 0,1, 1,1, 1,0, -1,1, 0,-1, 1,-1, -1,-1};//移动方位13 void Bfs(int x,int y);14 int Judge();15 int line,EaglesNum;16 queue Que;17 int main(){18 19 //freopen("D:\\t.txt","r",stdin);20 int flag = 1;21 while(cin>>line){22 23 for(int i = 0;i< line;i++){24 for(int j = 0;j < line;j++){25 cin>>Eagles[i][j];26 }27 }28 EaglesNum = Judge();29 cout<<"Image number "<< flag <<" contains "< <<" war eagles."< < line;j++){40 if(Eagles[i][j] == '1' && !IsVis[i][j]){41 p.x = i;42 p.y = j;43 Que.push(p);44 Bfs(i,j);45 Num++;46 }47 }48 }49 return Num;50 }51 void Bfs(int x,int y){52 War m,n;53 while(!Que.empty()){54 m = Que.front();55 IsVis[m.x][m.y] = 1;56 for(int k = 0;k < 8;k++){57 if((m.x + Move[k][0] >= 0) && (m.x + Move[k][0] < line) && (m.y + Move[k][1] >= 0) && (m.y + Move[k][1] < line)58 && !IsVis[m.x + Move[k][0]][m.y + Move[k][1]]){ //判断移动是否超范围及是否被访问59 n.x = m.x + Move[k][0];60 n.y = m.y + Move[k][1];61 IsVis[n.x][n.y] = 1;62 if(Eagles[n.x][n.y] == '1')Que.push(n);63 }64 }65 Que.pop();66 }67 }
修改后的代码
bfs的题目。
1.注意队列使用;
2.注意移动范围;
3.输入以字符形式输入。