首页 > 其他 > 详细

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

时间:2015-12-22 21:03:29      阅读:165      评论:0      收藏:0      [点我收藏+]

链接: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 }
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\n",ans);
57     }
58     return 0;
59 }
View Code

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

原文:http://www.cnblogs.com/yepiaoling/p/5068004.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!