注册 登录
编程论坛 数据结构与算法

各位大神帮我看下,一个马踏遍的程序,为啥后面运行时,程序自动关闭

朽神 发布于 2016-06-17 16:58, 2510 次点击
#include
#define N 8
typedef struct
{
    int i1;
    int j1;
    int di1;
}Box;
typedef struct
{
    int top;
    Box data[N*N];
}sqstack;
bool hourse(int b[N][N],int x,int y)
{
    int i,j,k=0,di,find;
    sqstack st;
    st.top=-1;
    st.top++;
    st.data[st.top].i1=x;//保存行号
    st.data[st.top].j1=y;//保存列号
    st.data[st.top].di1=-1;//保存所走的路径
    b[x][y]=k;
    while(st.top>-1)
    {
        i=st.data [st.top].i1;
        j=st.data [st.top].j1;
        di=st.data[st.top].di1;
        find=0;
        if(b[N][N]=N*N)
            return true;
        while(di<8&&find==0)
        {
            di++;
            switch(di)
            {
            case 0:i=st.data[st.top].i1-2;
                   j=st.data[st.top].j1-1;
                   if(i<0||i>=N||j<0||j>=N)
                        di++;
                    else break;
            case 1:i=st.data[st.top].i1-2;
                   j=st.data[st.top].j1+1;
                   if(i<0||i>=N||j<0||j>=N)
                        di++;
                    else break;
            case 2:i=st.data[st.top].i1-1;
                   j=st.data[st.top].j1+2;
                   if(i<0||i>=N||j<0||j>=N)
                        di++;
                    else break;
            case 3:i=st.data[st.top].i1+1;
                   j=st.data[st.top].j1+2;
                   if(i<0||i>=N||j<0||j>=N)
                        di++;
                    else break;
            case 4:i=st.data[st.top].i1+2;
                   j=st.data[st.top].j1+1;
                   if(i<0||i>=N||j<0||j>=N)
                        di++;
                    else break;
            case 5:i=st.data[st.top].i1+2;
                   j=st.data[st.top].j1-1;
                   if(i<0||i>=N||j<0||j>=N)
                        di++;
                    else break;
            case 6:i=st.data[st.top].i1+1;
                   j=st.data[st.top].j1-2;
                   if(i<0||i>=N||j<0||j>=N)
                        di++;
                    else break;
            case 7:i=st.data[st.top].i1-1;
                   j=st.data[st.top].j1-2;
                   if(i<0||i>=N||j<0||j>=N)
                        di++;
                    else break;
            }
            if((b[i][j])==0)find=1;//找到下一个可走的方块
        }
        if(find=1&&di<8)
        {
            st.data[st.top].di1=di;
            st.top++;
            st.data[st.top].i1=i;
            st.data[st.top].j1=j;
            k++;
            b[i][j]=k;
        }
        else
        {
            b[st.data[st.top].i1][st.data[st.top].j1]=0;
            k--;
            st.top--;
        }

    }
    return false;
}
void main()
{
    int i,j,h,t;
    bool flag;
    int Board[N][N]={0};
    printf("输入马踏遍开始的位置(0
1 回复
#2
书生牛犊2016-06-27 21:59
首先这个可以发到C语言板块去,,,根本不是算法的问题。
其次,你给的代码明显是不完整的,
最后如果你看到屏幕上出现了一个黑黑的窗口一闪而过,那是因为程序运行的太快了,运行结束就自动关掉了。。
百度一下“C 一闪而过”,你可以找到详细的解释以及具体解决方法。。
只有本站会员才能查看附件,请 登录

1