游戏开发论坛

 找回密码
 立即注册
搜索
楼主: 在梅边饿

应届生游戏工作好难找。。

[复制链接]

20

主题

465

帖子

472

积分

中级会员

Rank: 3Rank: 3

积分
472
QQ
发表于 2006-12-30 00:00:00 | 显示全部楼层

Re:一个应届毕业生的不归路。。。

想了很久,觉得第三题应该是个寻路的算法。

ZeroMemory(data, sizeof(data));
SetPath(data, 0, 0, 1);

void SetPath(int data[10][10], int x, int y, int step)
{
    // 判断最终大小(这并不是必须的)
    if (step > 25) return;

    // 返回
    if (x >= 5 || y >= 5 || x < 0 || y < 0)
    {
        return;
    }

    // 检查本身的值
    if (data[x][y] == 0)
    {
        // 设置为当前步数
        data[x][y] = step;
        // 向X轴寻路
        SetPath(data, x + 1, y, step + 1);
        // 向Y轴寻路
        SetPath(data, x , y + 1, step + 1);
        // 向X轴反向寻路
        SetPath(data, x, y - 1, step + 1);
        // 向Y轴反向寻路
        SetPath(data, x - 1, y, step + 1);
    }
    else
    {
        return ;
    }
}

最终做出来是这样的结果
[23:50:1 625]  1, 2, 3, 4, 5
[23:50:1 625]  22, 23, 24, 25, 6
[23:50:1 625]  21, 20, 19, 18, 7
[23:50:1 625]  14, 15, 16, 17, 8
[23:50:1 625]  13, 12, 11, 10, 9

还是有差距,没想到它是怎么搞的。更改坐标可以导致不同的结果,但是……

2

主题

17

帖子

28

积分

注册会员

Rank: 2

积分
28
 楼主| 发表于 2006-12-30 00:23:00 | 显示全部楼层

Re:一个应届毕业生的不归路。。。

饿。。。。有点出路了。。大大你真强。。

45

主题

1163

帖子

1165

积分

金牌会员

Rank: 6Rank: 6

积分
1165
发表于 2006-12-30 12:01:00 | 显示全部楼层

Re:一个应届毕业生的不归路。。。

找工作真是太难了,面试时第一个问题就是你参加过什么项目的开发....

23

主题

63

帖子

68

积分

注册会员

Rank: 2

积分
68
发表于 2006-12-30 13:21:00 | 显示全部楼层

Re:一个应届毕业生的不归路。。。

我把第三题做了吧.
//
// View the 2D array as a 2D map
// Initial positon:array[0][0], direction:forward
// 基本规律:向前走不成就右转,右转不成就左转
// 位置(3,0)不符合基本规律,加入认为扰动
//
#include <stdio.h>

const int right = 0;
const int down = 1;
const int left = 2;
const int top = 3;

int g_array[5][5];
int g_nX = 0, g_nY = 0;
int g_dir = right;

void GetNextDir()
{
        if ((g_dir == right && (g_nY == 4 || g_array[g_nX][g_nY+1] != 0) ) ||
                (g_dir == down && (g_nX == 4 || g_array[g_nX+1][g_nY] != 0) )    ||
                (g_dir == left && (g_nY == 0 || g_array[g_nX][g_nY-1] != 0) )  ||
                (g_dir == top && (g_nX == 0 || g_array[g_nX-1][g_nY] != 0) )         
                )
        {
                g_dir++;
                {
                        if (g_dir > top)        g_dir = right;
                }
                GetNextDir();
        }
}
void FillPathArray()
{
        for (int i=0; i<25; i++)
        {
                g_array[g_nX][g_nY] = i+1;
                if (i == 24) return;
                GetNextDir();

                // 不符合规律(前->右->左)时的人为扰动
                if (g_nX == 3 && g_nY == 0)                g_dir = right;

                if (g_dir == right)                g_nY++;
                if (g_dir == down)                g_nX++;
                if (g_dir == left)                g_nY--;
                if (g_dir == top)                g_nX--;
        }
}

int main()
{
        FillPathArray();
        for (int i = 0; i < 5; i++)
        {
                for (int j = 0; j < 5; j++)
                {
                        printf("%4d", g_array[j]);
                }
                printf("\n");
        }

        return 0;
}

2

主题

17

帖子

28

积分

注册会员

Rank: 2

积分
28
 楼主| 发表于 2006-12-30 14:22:00 | 显示全部楼层

Re:一个应届毕业生的不归路。。。

。。。。。。
哎我学术真的不精耶。。
这些应该哪学的到呢?
基础的C++语法我是完全掌握了。。而这种算法题。我只能看出个大概。写出来好难。

也没什么抱怨了,现在想通了

154

主题

4567

帖子

4579

积分

论坛元老

Rank: 8Rank: 8

积分
4579
QQ
发表于 2006-12-30 16:13:00 | 显示全部楼层

Re:一个应届毕业生的不归路。。。

传说中的 a* ?

分析下,行走方向优先级

1 →
2 ↑
3 ↓
4 ←
每走一步将上一个坐标标记为“走过”
同时满足条件:绝对不会重复或者后退,即标不会踏上记为“走过”的位置

=======
PS: 俺是半吊子策划,非常不专业,过来凑热闹的

优先级有点晕了, [em7] 怎么回事!逻辑错误???

154

主题

4567

帖子

4579

积分

论坛元老

Rank: 8Rank: 8

积分
4579
QQ
发表于 2006-12-30 16:40:00 | 显示全部楼层

Re: 一个应届毕业生的不归路。。。

这种现象的推测是

优先级在运行过程中更改过  [em10]
sf_20061230163957.png

154

主题

4567

帖子

4579

积分

论坛元老

Rank: 8Rank: 8

积分
4579
QQ
发表于 2006-12-30 16:56:00 | 显示全部楼层

Re:一个应届毕业生的不归路。。。

结论:
01 - 17 : → > ↓ > ← > ↑
18 - 25 : ↑ > ← > ↓ > →  (不完全归纳)

20

主题

465

帖子

472

积分

中级会员

Rank: 3Rank: 3

积分
472
QQ
发表于 2006-12-30 17:42:00 | 显示全部楼层

Re:一个应届毕业生的不归路。。。

我的方法一个解决方法就是
data[1][2] = 24;
data[1][3] = 25;
如果这两个值先设定了。用右、下、左、上的规则就行。或者,在step17之后,使用上、左、下右的规则,但是那样做很流氓,就跟14楼的一样了。我觉得这不是正确的答案,肯定有更变态的方法。

2

主题

17

帖子

28

积分

注册会员

Rank: 2

积分
28
 楼主| 发表于 2006-12-30 17:49:00 | 显示全部楼层

Re:一个应届毕业生的不归路。。。

// PBox.cpp : Defines the entry point for the console application.
/*
方格生成程序 by xmxoxo
  题目:
如下图所示:把该图存于int data[10][10]中,请用代码实现
1  2  3  4  5
22 21 20 19  6
23 24 25 18  7
14 15 16 17  8
13 12 11 10  9

*/

#include "stdafx.h"
#include "stdlib.h"
#include "iostream.h"
#include "iomanip.h"

//最大100
int data[10][10];
int dire[4][2]={{0,-1},
{1,0},{0,1},{-1,0}};

void init()
{
int i,j;
for (i=0;i<10;i++)
{
for (j=0;j<10;j++)
{
data[j]=0;
}
}
}
//生成K方格
void gen(int k)
{
int x,y,n,d,ct,s;
x = -1; //初始坐标 -1,0
y = 0;
d = 1; //初始方向1
n = 1; //要填的数
ct = 0; //转弯计数器
s=0; //标志
while (n<=k*k)
{
//计算下一个位置
x = x + dire[d][0];
y = y + dire[d][1];
//判断超出
if ((x>=k||x<0)||(y>=k||y<0))
{
//,超出则退回原位
x = x -  dire[d][0];
y = y - dire[d][1];
//转方向
d++;
if (d==4){d=0;}
s = 1;
continue;
}
//判断下一个位置
//为空,则填入数
if (data[x][y]==0)
{
data[x][y] = n;
n++;
if (s==1)
{
ct++;
s=0;
}
//如果是第3次转向
if (ct==3)
{
//填写一个数后立即转下一个方向
d++;
if (d==4){d=0;}
ct=0;
s=0;
}
continue;
}
//有数字
if (data[x][y]!=0)
{
//退回原位
x = x -  dire[d][0];
y = y - dire[d][1];
//转方向
d++;
if (d==4){d=0;}
s=1;
continue;
}
}
}

//输出
void out(int k)
{
int i,j;
for (i=0;i<k;i++)
{
for (j=0;j<k;j++)
{
cout <<setw(4) << data[j];
}
cout<<endl;
}
}

int main()
{
int m;
while (1)
{
cout<< "请输入2-10之间的数[0退出]:";
cin>>m;
if (m==0)
{
break;
}
if (m<=10||m>=2)
{
init();
gen(m);
out(m);
}
}
return 0;
}

请输入2-10之间的数[0退出]:5
   1   2   3   4   5
  22  21  20  19   6
  23  24  25  18   7
  14  15  16  17   8
  13  12  11  10   9
请输入2-10之间的数[0退出]:6
   1   2   3   4   5   6
  28  27  26  25  24   7
  29  30  31  32  23   8
  36  35  34  33  22   9
  17  18  19  20  21  10
  16  15  14  13  12  11
请输入2-10之间的数[0退出]:7
   1   2   3   4   5   6   7
  34  33  32  31  30  29   8
  35  36  37  38  39  28   9
  46  45  44  43  40  27  10
  47  48  49  42  41  26  11
  20  21  22  23  24  25  12
  19  18  17  16  15  14  13
请输入2-10之间的数[0退出]:0
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-26 04:32

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表