西安网站建设收费标准网站建设捌金手指花总十
西安网站建设收费标准,网站建设捌金手指花总十,c 做网站优点,网站建设的认识题目#xff1a;一个3阶的数字矩阵如下#xff1a;
1 2 3
8 9 4
7 6 5
现在给定数字n(1n≤20)#xff0c;输出n阶数字矩阵。 思路#xff1a;
放出一条好玩的贪吃蛇#xff0c;按照右下左上的顺序吃蛋糕#xff0c;一边吃蛋糕#xff0c;一边拉数字#xff1b…题目一个3阶的数字矩阵如下
1 2 3
8 9 4
7 6 5
现在给定数字n(1n≤20)输出n阶数字矩阵。 思路
放出一条好玩的贪吃蛇按照右下左上的顺序吃蛋糕一边吃蛋糕一边拉数字多吃一个蛋糕拉出的数字多1直到把所有的蛋糕吃完。
因为贪吃蛇出动按照右、下、左、上4个方向因此先定义一个按右下左上方向的偏移数组。
定义了偏移数组后就可以从左上角开始先向右走只要有蛋糕或未到边界就继续前进否则选择下一个方向右下左上顺序一直走下去直到拉出的数字达到最大值n2算法停止。
因为吃了蛋糕后这个方格就变成了一个大于零的数字因此可以设置为0时有蛋糕否则没有蛋糕。初始状态全部为0。
本题因为不可以超出四周边界因此采用四周封锁。设置一个无法行进的数值即可达到封锁目的。在第0行和第n1行设置数字-1第0列和第n1列设置数字-1标识四周无法行进。
做了封锁之后再也不用担心小贪吃蛇跑出边界了它只需要按照右下左上的方向只吃有蛋糕的格子数值为0就可以了。 #includeiostream
#includealgorithm
using namespace std;typedef struct{int x;int y;
} Position;int m[30][30]; //存地图
Position here, next; //当前位置下一位置
Position DIR[4] {0,1,1,0,0,-1,-1,0};//右下左上方向数组 void Init(int n)
{for(int i1; in; i)for(int j1; jn; j)m[i][j] 0; //地图初始化为0 for(int i0; in1; i)m[i][0] m[i][n1] -1; //左右围墙 for(int j0; jn1; j)m[0][j] m[n1][j] -1; //上下围墙
}void Solve(int n)
{m[1][1] 1; //第一个数 here.x here.y 1; //初始化位置 int dirIndex 0, num 1; //偏移下标 总数while(numn*n){next.x here.x DIR[dirIndex].x;next.y here.y DIR[dirIndex].y;if(m[next.x][next.y]0){m[next.x][next.y] num; //满足条件则更新地图 here next; //继续走 }else{dirIndex (dirIndex1)%4; //碰到围墙换方向 } }
}int main()
{int n 0;cin n;Init(n);Solve(n);for(int i1; in; i){for(int j1; jn; j)cout \t m[i][j];cout endl;} return 0;
} 来源《趣学数据结构》陈小玉
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/86775.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!