首页 > 代码库 > Uva 352 The Seasonal War
Uva 352 The Seasonal War
1 #include <iostream> 2 #include <cstring> 3 #include <queue> 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 int Bfs(int x,int y);14 int line,EaglesNum;15 int main(){16 17 //freopen("D:\\t.txt","r",stdin);18 while(cin>>line){19 int flag = 1;20 for(int i = 0;i< line;i++){21 for(int j = 0;j < line;j++){22 cin>>Eagles[i][j];23 }24 }25 EaglesNum = Bfs(0,0);26 cout<<"Image number "<< flag<<" contains "<<EaglesNum<<" war eagles"<<endl;27 flag++;28 }29 30 return 0;31 }32 int Bfs(int x,int y){33 War m,n;34 queue<War> Que;35 int Num = 0;36 m.x = x;37 m.y = y;38 memset(IsVis,0,sizeof(IsVis));//每一回合初始化39 Que.push(m);40 for(int i = 0;i< line;i++){41 for(int j = 0;j < line;j++){42 if(Eagles[i][j] == ‘1‘ && !IsVis[i][j]){43 while(!Que.empty()){44 m = Que.front();45 Que.pop();46 for(int k = 0;k < 8;k++){47 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)48 && !IsVis[m.x + Move[k][0]][m.y + Move[k][1]]){//判断移动是否超范围及是否被访问49 n.x = m.x + Move[k][0];50 n.y = m.y + Move[k][1];51 IsVis[n.x][n.y] = 1;52 if(Eagles[n.x][n.y] == ‘1‘){53 Que.push(n);54 }55 }56 }57 Num++;58 }59 }60 }61 }62 63 return Num;64 }
题目属于Bfs。
1.注意队列的使用;
2.注意输入以字符方式,不能用数字,用数字的话会错。
ps:uva挂了,不确定是否ac
Uva 352 The Seasonal War
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。