读书人

一道作业题(在方阵内行走),该如何解

发布时间: 2012-04-03 12:38:19 作者: rapoo

一道作业题(在方阵内行走)
9 8 7
6 5 4
3 2 1

从1走到9,
如 12369 , 147852369 ,14589 等
求出所有的走法!


[解决办法]
从1开始,按照上下左右的顺序往下走,如果发现一条同路,那么就回退一步,按照剩余方向继续,如果所有方向走完,那么继续回退一格,直到起点所有方向走完,就知道所有路线了
[解决办法]
有点像《数据结构》里的迷宫算法,可以在网上了解一下。
[解决办法]
用结构体表示每一点, 里面包含点坐标, 点方向(可用枚举), 及是否已入栈的标识。 利用栈结构 走过一点便将其入栈,并标识。 遇到同线 到终点 下一点已访问时, 退回一点访问下一方向,知道该点所有方向都走完了。继续退回。知道二楼所述起点方向被遍历完。 建议楼主看一下迷宫算法。
[解决办法]

C/C++ code
#define  N    3static int getNumByXandY(int x, int y){    return (N * N) - y * N - x;}// okvoid goFrom1To9(int arr[], int position, int startX, int startY, int endX, int endY){    if(startX == endX && startY == endY)    {        for(int i = 0; i < position; ++i)            cout << arr[i];        cout << getNumByXandY(endX, endY);        cout << endl;    }    else if(startX > N - 1 || startX < 0 || startY > N - 1 || startY < 0)    {        return;    }    else    {        for(int i = 0; i < position; ++i)        {            if(arr[i] == getNumByXandY(startX, startY))                return;        }        arr[position] = getNumByXandY(startX, startY);        goFrom1To9(arr, position + 1, startX + 1, startY, endX, endY);        goFrom1To9(arr, position + 1, startX - 1, startY, endX, endY);        goFrom1To9(arr, position + 1, startX, startY + 1, endX, endY);        goFrom1To9(arr, position + 1, startX, startY - 1, endX, endY);    }}int main(){    int arr[9];    goFrom1To9(arr, 0, 2, 2, 0, 0);    return 0;}
[解决办法]
不想递归就广搜, 想递归就深搜.

读书人网 >C++

热点推荐