标题:怎么样把这个程序改写成求所有路径中最长的路径长度并显示
只看楼主
童国顺
Rank: 1
等 级:新手上路
帖 子:70
专家分:6
注 册:2010-4-18
结帖率:60%
已结贴  问题点数:2 回复次数:2 
怎么样把这个程序改写成求所有路径中最长的路径长度并显示
#include<stdio.h>
#define m 4
#define n 4
#define maxsize 100
int mg[m+2][n+2]={
    {1,1,1,1,1,1},
    {1,0,0,0,1,1},
    {1,0,1,0,0,1},
    {1,0,0,0,1,1},
    {1,1,0,0,0,1},
    {1,1,1,1,1,1}
};
struct
{
    int i;int j;int di;
}stack[maxsize],path[maxsize];
int top=-1;
int count=1;
int maxlen=maxsize;
void mgpath()
{
    int i,j,di,find,k;
    top++;stack[top].i=1;stack[top].j=1;stack[top].di=-1;mg[1][1]=-1;
    while(top>-1)
    {
        i=stack[top].i;j=stack[top].j;di=stack[top].di;
        if(i==m&&j==n)
        {
            printf("%4d:",count++);
            for(k=0;k<=top;k++)
            {
                printf("(%d %d)",stack[k].i,stack[j].j);
                if((k+1)%5==0)printf("\n\t");
            }
            printf("\n");
            if(top+1<maxlen)
            {
                for(k=0;k<=top;k++)
                    path[k]=stack[k];
                maxlen=top+1;
            }
            mg[stack[top].i][stack[top].j]=0;
            top--;
            i=stack[top].i;j=stack[top].j;di=stack[top].di;
        }
        find=0;
        while(di<4&&find==0)
        {
            di++;
            switch(di)
            {
            case 0:i=stack[top].i-1;j=stack[top].j;break;
            case 1:i=stack[top].i;j=stack[top].j+1;break;
            case 2:i=stack[top].i+1;j=stack[top].j;break;
            case 3:i=stack[top].i;j=stack[top].j-1;break;
            }
            if(mg[i][j]==0) find=1;
        }
        if(find==1)
        {
            stack[top].di=di;
            top++;
            stack[top].i=i;
            stack[top].j=j;
            stack[top].di=-1;
            mg[i][j]=-1;
        }
        else
        {
            mg[stack[top].i][stack[top].j]=0;
            top--;
        }
    }
    printf("最长路径如下:\n");
    printf("长度:  %d\n",maxlen);
    printf("路径:");
    for(k=0;k<maxlen;k++)
    {
        printf("(%d %d)",path[k].i,path[k].j);
        if((k+1)%5==0) printf("\n\t");
    }
    printf("\n");
}
void main()
{
    printf("迷宫是有路径如下:\n");
    mgpath();
}
搜索更多相关主题的帖子: include count 
2011-03-26 21:16
童国顺
Rank: 1
等 级:新手上路
帖 子:70
专家分:6
注 册:2010-4-18
得分:0 
帮下了。哎  怎么这个问题都没有人帮啊?难道是太容易了????????
2011-03-27 16:08
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
得分:1 
怎样求最长的?
2011-03-28 09:23



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-334851-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.947510 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved