湖南大学2015年“新生杯”程序设计竞赛

链接: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
",a+b+c);
 9     }
10     return 0;
11 }
View Code

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
",ans);
57     }
58     return 0;
59 }
View Code
原文地址:https://www.cnblogs.com/yepiaoling/p/5068004.html