C语言一菜鸟级


私信TA

用户名:LHL

访问量:63488

签 名:

AC总是意料之外 ^_^

等  级
排  名 47
经  验 11200
参赛次数 5
文章发表 56
年  龄 24
在职情况 在职
学  校 四川工商学院
专  业 通信工程

  自我简介:

C语言 蓝桥杯 ACM 新人 欢迎大佬 前来指导 交流 本人 博客https://fivecc.blog.csdn.net/

解题思路:

      和蛇形填数 类似 不过填变成取了, 不装南墙不变方向 这里南墙指的 方阵的边界或前进方向的格子里面有数被加上标记了。(此题标记可以不要 只需要 令取了的格子赋值为1即可,这里是为了保险起见 题目没有明说数据范围,我们不能妄加判断,万一卡了啦 )


正题, 就是在执行下一步之前先预判一下当前你想到的下一个格子是否在方阵范围内是否有被取走了里面的数。 只有 在方阵内 并且 格子里面没有被取过 则可以移动到格子里取数。下面是代码 不多 可以阅读下 理理思路。



注意事项:

参考代码:

#include<stdio.h>
#include<string.h>

int main(){
     int n,m,x,y,num;int a[210][210];int f[210][210];//f[][] 标记
     while(scanf("%d%d",&n,&m)!=EOF){
     	memset(f,0,sizeof(f));
     	for(x=0;x<n;x++)
     	for(y=0;y<m;y++)
     	scanf("%d",&a[x][y]);
     	num=1;x=0;y=0;
     	printf("%d",a[x][y]);f[x][y]=1;//初始首位
     	while(n*m>num){
     		while(x+1<n&&!f[x+1][y])printf(" %d",a[++x][y]),f[x][y]=1,num++;//向下
     		while(y+1<m&&!f[x][y+1])printf(" %d",a[x][++y]),f[x][y]=1,num++;//向右
     		while(x-1>=0&&!f[x-1][y])printf(" %d",a[--x][y]),f[x][y]=1,num++;//向上
     		while(y-1>=0&&!f[x][y-1])printf(" %d",a[x][--y]),f[x][y]=1,num++;//向右
     	}
     	printf("\n");//末尾空行
     }
return 0;}


 

0.0分

4 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区