python版蛇形填数

引 入



蛇形填数,一道经典有趣的算法入门题。这里用python来实现。


代码 vim snake.py


#!/usr/bin/env python
#-*- coding: utf-8 -*-

#矩阵初始化函数
def genMatrix(rows,cols):  
    #用二维数组来代表矩阵
    matrix = [[0 for col in range(cols)] for row in range(rows)]  
    for i in range(rows):  
        for j in range(cols):  
            matrix[i][j]
    return matrix

#构造蛇形填数函数
def testSnake():
    #调用genMatrix函数
    matrix = genMatrix(number, number)
    i = j = 0
    total = matrix[i][j] = 1
    while(total < number * number):
        #向右填数
        while(j + 1 < number and matrix[i][j + 1] == 0): 
            total += 1
            j += 1
            matrix[i][j] = total
        #向下填数
        while(i + 1 < number and matrix[i + 1][j] == 0):
            total += 1
            i += 1
            matrix[i][j] = total
        #向左填数
        while(j > 0 and matrix[i][j - 1] == 0): 
            total += 1
            j -= 1
            matrix[i][j] = total
        #向上填数
        while(i + 1 > 0 and matrix[i - 1][j] == 0): 
            total += 1
            i -= 1
            matrix[i][j] = total
    #打印显示
    for i in range(number):  
            for j in range(number):
                print (‘\t%d ‘ % matrix[i][j]),
                #python2.X版本用print()后面加上逗号来不换行  
                #python3.X版本的打印不换行可用print (‘\t%d ‘ % matrix[i][j], end=‘‘)
            print(‘\n‘)

#主流程控制
while True:
    number = int(raw_input("Please Input your number:"))
    if(number <= 0):
        print("请输入大于0的整数")
        continue
    testSnake()
    flag = raw_input("Do you want to continue? Y/N").strip()  
    #字符串的strip()是为了去除命令行输入前后的空格
    if(flag.__eq__("Y")):
        continue
    break

运行测试

[[email protected] ~]# python snake.py 
Please Input your number: -2
请输入大于0的整数
Please Input your number: 3
1         2       3       

8         9       4       

7         6       5       

Do you want to continue? Y/N: Y
Please Input your number:4
1         2       3       4       

12        13      14      5       

11        16      15      6       

10        9       8       7       

Do you want to continue? Y/N: N
[[email protected] ~]#

结 语



程序=数据结构+算法,平时多多编写有趣的算法题,既能锻炼解决问题的能力,又能熟悉python相关语法,何乐而不为呢?

附:如对上面描述有疑问,期待与朋友您共同探讨。本人QQ:1084569767

时间: 2024-10-06 02:41:39

python版蛇形填数的相关文章

算法竞赛入门经典第二版 蛇形填数 P40

#include<bits/stdc++.h> using namespace std; #define maxn 20 int a[maxn][maxn]; int main(){ int n,x,y,tot=0; cin>>n; memset(a,0,sizeof(a)); tot=a[x=0][y=n-1]=1; while(tot<n*n){ while(x+1<n&&!a[x+1][y]) a[++x][y]=++tot; while(y-1&

&lt;蛇形填数&gt;--算法竞赛 入门经典(第2版)- 3.1 数组 程序3-3 蛇形填数

 蛇形填数: 在n×n方阵里填入1,2,....,n×n,要求填成蛇形.例如,n = 4 时方阵为:   10  11  12  1   9  16  13  2 8  15  14  3 7   6    5   4 上面的方阵中,多余的空格只是为了便于观察规律,不必严格输出.n <= 8 . 类比上面这种数学中的矩阵,我们可以考虑使用一个二维数组来储存. 解题思路:从右上角开始往下填数,当到底的时候转向左填值,当到左边的边的时候转向上填数,当到最上面的时候转向右填值...依次类推.第一轮转圈

&lt;蛇形填数&gt;--算法竞赛 入门经典(第2版) 程序3-3 蛇形填数

蛇形填数: 在n×n方阵里填入1,2,....,n×n,要求填成蛇形.例如,n = 4 时方阵为:   10  11  12  1   9  16  13  2 8  15  14  3 7   6   5  4 上面的方阵中,多余的空格只是为了便于观察规律,不必严格输出.n <= 8 . 类比上面这种数学中的矩阵,我们可以考虑使用一个二维数组来储存. 解题思路:从右上角开始往下填数,当到底的时候转向左填值,当到左边的边的时候转向上填数,当到最上面的时候转向右填值...依次类推.第一轮转圈的判断

梦工厂实验室 蛇形填数 dfs

问题 D: 蛇形填数 时间限制: 3 Sec  内存限制: 64 MB提交: 28  解决: 5[提交][状态][讨论版] 题目描述 在n*n方阵里填入1,2,...,n*n,要求填成蛇形.例如n=4时方阵为:10 11 12 19 16 13 28 15 14 37 6 5 4 输入 直接输入方阵的维数,即n的值.(n<=100) 输出 输出结果是蛇形方阵. 样例输入 3 样例输出 7 8 1 6 9 2 5 4 3 一类题型.四个方向dfs,当走不通时,t++改变方向,否则一直往一个方向走.

【基础题】蛇形填数

题目描述 在n*n方陈里填入1,2,...,n*n,要求填成蛇形.例如n=4时方陈为: 10 11 12 1 9 16 13 2 8 15 14 3 7 6 5 4 输入 直接输入方阵的维数,即n的值.(n<=100) 输出 输出结果是蛇形方陈. 样例输入 3 样例输出 7 8 1 6 9 2 5 4 3 先说一下我的思路,我把n=4时的情况列了出来,发现了奇数时,j变化,偶数时,i变化等变化规律,后来我发现需要总结很多变化规律才能算数来,总结出了n=4的,n=5时又不一样了,哎,头疼(小白的思

每日一练第7天:蛇形填数

蛇形填数.在n×n方阵里填入1,2,...,n×n,要求填成蛇形. 例如,n=4时方阵为: 10 11 12  1 9 16 13  2 8 15 14  3 7   6   5  4 解决此题的一个重要原则就是先判断下一个要填的位置是否满足条件,再填数.不是发现了不能填再退回来. 代码如下: 1 #include <stdio.h> 2 #include <string.h> 3 #define MAXN 100 4 int matrix[MAXN][MAXN]; 5 6 int

nyoj 33 蛇形填数

蛇形填数 时间限制:3000 ms  |            内存限制:65535 KB 难度:3 描述 在n*n方陈里填入1,2,...,n*n,要求填成蛇形.例如n=4时方陈为: 10 11 12 1 9 16 13 2 8 15 14 3 7  6  5 4 输入 直接输入方陈的维数,即n的值.(n<=100) 输出 输出结果是蛇形方陈. 样例输入 3 样例输出 7 8 1 6 9 2 5 4 3 1 #include <iostream> 2 using namespace s

[算法竞赛入门]蛇形填数

蛇形填数.在n×n方阵里填入1,2,-,n×n,要求填成蛇形.例如,n=4时方阵为:10 11 12 19 16 13 28 15 14 37 6 5 4上面的方阵中,多余的空格只是为了便于观察规律,不必严格输出.n≤8. [解析]这道题的解题思路主要还是在于如何模拟蛇形填数的过程. 我们给出两个概念的定义: (1)方向:该题中的方向顺序为"下-左-上-右" (2)墙:填数过程中若遇到墙,则应改变方向. [一种实现思路]注:这里我将n*n矩阵广义为n*m矩阵,令m=n. #includ

蛇形填数之斜着排

/* 题目大意:填数 解题思路:模拟填数的过程 难点详解:模拟填数的过程考虑清楚即可 关键点:如何填数,如何控制填数的次数 解题人:lingnichong 解题时间:2014/08/16    12:40 解题体会:是蛇形填数的另外一种变形 */ 奇数阶魔方 Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submission(s) : 4   Accepted Subm