链接:http://acm.hnu.cn/online/?action=problem&type=list&courseid=338
C题:征程的开始
使用while (scanf("%d %d",&a,&b)!=EOF)语句。
1 /*C*/ 2 #include<stdio.h> 3 int main() 4 { 5 int a,b,c; 6 while(scanf("%d%d%d",&a,&b,&c)!=EOF) 7 { 8 printf("%d\n",a+b+c); 9 } 10 return 0; 11 }
D题:海内存知己
简单BFS求联通块数
1 /*D*/ 2 #include<stdio.h> 3 #include<string.h> 4 char matrix[55][55];//定义二维数组 5 int vis[55][55];//标记是否访问过 6 int queue[3000];//用队列存储 7 int m;//每行的人数 8 int ans;//所求的联通块数 9 int dx[4]={-1,1,0,0},dy[4]={0,0,-1,1}; 10 11 void BFS(int x,int y) 12 { 13 if(vis[x][y]==1) 14 return;//访问过则退出 15 int front=0,rear=0; 16 int nx,ny; 17 int d; 18 int u; 19 vis[x][y]=1; 20 ans=ans+1; 21 u=x*m+y; 22 queue[rear++]=u; 23 while(front<rear) 24 { 25 u=queue[front++]; 26 x=u/m;y=u%m; 27 for(d=0;d<4;d++) 28 { 29 nx=x+dx[d];ny=y+dy[d]; 30 if(nx<0||nx==m||ny<0||ny==m) 31 continue; 32 if(vis[nx][ny]==1) 33 continue; 34 if(matrix[nx][ny]=='X') 35 continue; 36 u=nx*m+ny; 37 queue[rear++]=u; 38 vis[nx][ny]=1; 39 } 40 } 41 } 42 43 int main() 44 { 45 int i,j; 46 while(scanf("%d",&m)!=EOF) 47 { 48 for(i=0;i<m;i++) 49 scanf("%s",matrix[i]); 50 memset(vis,0,sizeof(vis)); 51 ans=0; 52 for(i=0;i<m;i++) 53 for(j=0;j<m;j++) 54 if(matrix[i][j]=='.') 55 BFS(i,j);//对每个人进行BFS 56 printf("%d\n",ans); 57 } 58 return 0; 59 }