阅读 78662 次
发表时间:2009-12-16
我也贴一个吧,写了10分钟的样子~ 比较土  思路就是走到头或者走不通就转弯~
package algorithm;

import java.util.LinkedList;

public class Snack {
  int[][] array;
  int m=0,n=0;
  LinkedList<String> quere = new LinkedList<String>();
  public Snack(){
    quere.add("r");
    quere.add("d");
    quere.add("l");
    quere.add("u");
  }
  public void printSnack(int N){
    array = new int[N][N];
    for(int i=1;i<=N*N;i++){
      array[m][n]=i;
      indexControl(quere,N);
    }
    for(int i=0;i<N;i++){
      for(int j=0;j<N;j++){
        System.out.print(array[i][j]+"\t");
      }
      System.out.println();
    }
  }
  private void indexControl(LinkedList<String> quere,int N){
    String method = quere.peek();
    if(method.equals("r")){
      n++;
      if((n==N-1)||array[m][n+1]!=0){
        quere.add(quere.poll());
      }
    }else if(method.equals("d")){
      m++;
      if((m==N-1)||array[m+1][n]!=0){
        quere.add(quere.poll());
      }
    }else if(method.equals("l")){
      n--;
      if((n==0)||array[m][n-1]!=0){
        quere.add(quere.poll());
      }
    }else{
      m--;
      if(array[m-1][n]!=0){
        quere.add(quere.poll());
      }
    }
  }
  public static void main(String[] args) {
    new Snack().printSnack(5);
    new Snack().printSnack(6);
  }
}
发表时间:2009-12-16
哎,原来不想回的,看这么多人回,自己也搞一个把。。。。


现在不搞Java了,就贴个C吧

#include <stdio.h>
#define TIME 10

static int num = 1;
static int p[TIME+1][TIME+1];

void init()
{
	int o,x;
	for( o = 0;o < TIME+1;o++){
		for( x = 0;x < TIME+1;x++){
			if(o == 0 || x == 0 || x == TIME ||o == TIME )
				p[o][x] = -1;
			else	p[o][x] = 0;}
	}
}

int main()
{
	init();
	int x = 0,y = 0;
	while(num <(TIME -1)*(TIME -1) +1)
	{
		++y;	while(p[y][++x] == 0)
			p[y][x] = num++;
		--x;	while(p[++y][x] == 0)
			p[y][x] = num++;
		--y;	while(p[y][--x] == 0)
			p[y][x] = num++;
		++x;	while(p[--y][x] == 0)
			p[y][x] = num++;
	}
	int o,j;
	for( o = 0;o < TIME + 1;o++){
		printf("\n");
		for( j = 0;j < TIME + 1;j++){
			printf(" %d ",p[o][j]);
		}
	}
	printf("\n");
}


发表时间:2009-12-16
墙就懒得去了。。。。
发表时间:2009-12-19
class Snake
  attr_accessor :space, :position, :steps, :try_count
  NEXT_DIRECTION = {"right" => "down", "down" => "left", "left" => "up", "up" => "right"}
  HOW_TO_STEP = {"right" => [0, 1], "down" => [1, 0], "left" => [0, -1], "up" => [-1, 0]}
  #初使化
  def initialize(n)
    @space = Array.new(n){Array.new(n){0}}
    @position = [0, 0]
  end
  #记录走过的路
  def set_border()
      @steps = @steps.to_i + 1
      @space[@position[0]][@position[1]] = @steps
  end
  #看看下一步该如何走
  def step_next(direction =  "right")
    if @try_count == 2
      @space[@position[0]][@position[1]] = @steps
      print_path() and return
    end
    next_position = next_position(@position, HOW_TO_STEP[direction])
    if is_border?(next_position)
      @try_count = @try_count.to_i + 1
      step_next(NEXT_DIRECTION[direction])
    else
      set_border()
      @position = next_position
      @try_count = 0
      step_next(direction)
    end
  end
  #打印路径
  def print_path()
    @space.each{|i| i.each{|w| print "#{w}".rjust(@steps.to_s.size+1)};puts}
  end
  #这个位置是边界吗?
  def is_border?(here)
    @space[here[0]][here[1]] != 0
  rescue
    true
  end
  #跟据位置和如何走,得到下一步的位置
  def next_position(a, b)
    [a[0]+b[0], a[1]+b[1]]
  end
end
puts "请输入一个整数,最好不要太大:-)"
Snake.new(gets().to_i).step_next

经过前面的提示,自己也写一个试试
发表时间:2009-12-19
小女孩走迷宫,抓老鼠版 ……

# coding: utf-8
require 'matrix'
def 诱 数
  妹, 鼠 = Vector[0,0], Vector[0,1]
  抓 = Matrix[[0,1],[-1,0]] # 旋转矩阵 [[cos90°,sin90°], [-sin90°,cos90°]]
  摸 = Array.new(数){Array.new 数, nil}
  1.upto(数 * 数){|吃|
    女, 未 = 妹.to_a
    摸[女][未] = 吃
    纯, 洁 = (妹 + 鼠).to_a
    鼠 = 抓 * 鼠 if (纯 < 0 or 纯 >= 数 or 洁 < 0 or 洁 >= 数 or 摸[纯][洁])
    妹 += 鼠
  }
  齐 = (数 * 数).to_s.size
  puts "int i = #{数};"
  puts 摸.map{|行| 行.map{|粒| 粒.to_s.ljust 齐}.join ' '}.join("\n")
end
诱 5
诱 6
发表时间:2009-12-20
我觉得上面的代码并不是最好的代码?应该有一个规则,无论怎么样。都能适应,考虑用矩阵?
发表时间:2009-12-20
我觉得这代码看着简单,只要再加一点点判断,就差不多了,比上面的那种感觉应付要好多了
发表时间:2009-12-25
我以前帮别人写的
#include <stdio.h> 
#define N 10
int main(){
    int a[N*N],x=0,y=0,m=0,i;
    for(i=0;i<N*N;i++){
        a[x+y*N]=i;
        x+=((m+1)&1)*(1-m);
        y+=((m+0)&1)*(2-m);
        if(x==y||x+y==N-1){
            m=++m&3;
            if(!m)x=++y;
        }
    }
    for(i=0;i<N*N;i++)
        printf("%02d%c",a[i],(i%N+1)/N*10);
} 
发表时间:2009-12-27

void loop(int count)
{
    int array[10][10]={0};
    int i=0;
    int j=0;
    int key=1;
    int rang = count;
    int xy_00 = 0, // 相对零点
        y = 0;
    do
    {
        int x_min = xy_00;
        int x_max = xy_00 + rang - 1;
        for(i=0, y=xy_00; i<rang; i++, y++)
        {
            array[x_min][y] = key + i;
            array[x_max][y] = (key + rang + (rang-1)*2 -1) - i;
            if(rang>1 && i < (rang-2))
            {
                array[x_min+i+1][xy_00]        = key + rang + 2*(rang-1) + (rang-2) - i -1;
                array[x_min+i+1][xy_00+rang-1] = key + rang  +i;
            }
        }
        key = key + rang + (rang-1)*2 + (rang-2);
        xy_00++;
    }while(0 < (rang=rang-2));

    for(i=0;i<count;i++)
    {
        for(j=0;j<count;j++)
        {
            printf("%4d",  array[i][j]);
        }
        printf("\n");
    }
}
发表时间:2009-12-28
强势围观某小号

aasddsasda 写道
我以前帮别人写的
#include <stdio.h> 
#define N 10
int main(){
    int a[N*N],x=0,y=0,m=0,i;
    for(i=0;i<N*N;i++){
        a[x+y*N]=i;
        x+=((m+1)&1)*(1-m);
        y+=((m+0)&1)*(2-m);
        if(x==y||x+y==N-1){
            m=++m&3;
            if(!m)x=++y;
        }
    }
    for(i=0;i<N*N;i++)
        printf("%02d%c",a[i],(i%N+1)/N*10);
} 

Global site tag (gtag.js) - Google Analytics