发表时间: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); } |