| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1456 人关注过本帖
标题:语法有一个字母错误,哪位兄台给看一下把.有详细介绍
只看楼主 加入收藏
yaoguai2005
Rank: 1
等 级:新手上路
帖 子:168
专家分:0
注 册:2005-9-11
收藏
 问题点数:0 回复次数:25 
语法有一个字母错误,哪位兄台给看一下把.有详细介绍
请大家直接看第3楼的帖子把,这个程序是错的,对不起大家了 我把它删除了 还有要看斑竹修改后的程序,

[此贴子已经被作者于2005-9-12 15:42:37编辑过]

搜索更多相关主题的帖子: 语法 字母 
2005-09-11 18:09
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
收藏
得分:0 
// 算法没帮你看,只是帮你改了下语义上的错误
#include <stdio.h>
#define MAX_LEN 10000
#define n 6
int len; //µ±Ç°×ß¹ýµÄÀç¾µµÄȨֵºÍ
int min;//µ±Ç°ÕÒµ½µÄ×î¶Ì·¾¶µÄºÍ
int k;//µ±Ç°×î¶ÌµÄ²½Êý
int c[n];//×î¶Ì·

//µÝ¹é×Ó¹ý³Ì£¬´ÓXµ½Y£¬×ܲ½ÊýΪZ
void fd(int*gr,int x,int y,int z,int*a, int*b)
{
    //Õâ¾äÀïbool*bÖмäµÄ£ªºÅ±»Ìáʾ´íÎó£®´íÎóÌáʾÊÇ˵£ºËµÃ÷Óï·¨´íÎó.¶øÇÒÖ»ÓУªºÅ±ä³ÉÀ¼É«£¬boolºÍb¶¼ºÃºÃµÄ£¬ÔÚ*ºÅµÄÏÂÃæÓÐÒ»µÀÀ¶ÏßÌáʾ*ºÅ´íÎó,Çë´ó¼ÒÖ¸µãÕâ¸ö*ºÅµ½µ×´íÔÚɶµØ·½ÁË\ÈçºÎÐÞ¸ÄÄØÕâ¸öÓï¾ä,Õâ¸ö³ÌÐòÀï¾ÍÕâÒ»¸ö´íÎóÁË,»¹Çë´ó¼ÒÖ¸µã.ÕâÊǸöÇó×î¶Ì·¾¶µÄС³ÌÐò,ÎÒÕÒÁË°ë¸öÔ²ÅÕÒ¼ûµÄ.лл{
    int f,j;
    for(f=0;f<n;f++)
    {
        //ÈÃF´Ó0µ½N-1Ñ°ÕÒÁÚ½áµã
        if(gr[x*n+f]>0&&b[f]==false)
        {
            //ÅжÏÊÇ·ñFµãÔÚXÁÚÓò²¢ÇÒFµãûÓÐ×ß¹ý
            a[z]=f; //×ßµ½Fµã£¨Fµã½øÕ»£©
            b[f]=true; //¼Ç¼FµãÒѾ­×ß¹ý
            len=len+gr[x*n+f]; //ÔÚµ±Ç°Â·¾¶³¤¶ÈÖÐÔö¼Óб߳¤
            if(f!=y) //Èç¹ûûÓÐ×ßµÀYµã¾Í¼ÌÐø×ß
                fd(gr,f,y,z+1,a,b);
            else if(len<min)
            {//×ßµ½Y¾Í¿´µ±Ç°³¤¶ÈÊÇ·ñ±Èµ±Ç°×îС³¤¶ÈС£¬Èç¹ûµ±Ç°Ð¡¾Í¸üÐÂ
                k=z;//ÏȼǼϵ±Ç°Àç¾µµÄµãÊý
                min=len;//ÒÔµ±Ç°³¤¶È×÷Ϊµ±Ç°×îС³¤¶È
               for(j=1;j<k+1;j++)//ÒÀ´Î¸ü»»µ±Ç°×î¶Ì·¾¶ÖеÄÿ¸öµã
                    c[j]=a[j];
            }//½áÊø¸üÐÂ
            len=len-gr[x*n+f];//Í˵ôFµã£¬ÏÈÔÚµ±Ç°Â·¾¶³¤¶ÈÖмõÈ¥Í˳öµÄÒ»Ìõ±ß³¤
            b[f]=false;//°ÑFµã»Ö¸´ÎªÃ»ÓÐ×ß¹ý
        }//½áÊøXÁÚÓòµÄËÑË÷
    }
}

//ÔÚN¸öµãµÄÍøÉÏÇóXµ½YµÄ×î¶Ì·¾¶£¬¹ØÁª¾àÕóÊÇGR
void shortest(int*gr,int x,int y,int*a,int*b)
{
    int i;
  min=MAX_LEN;
  for(i=0;i<n;i++)
        b[i]=false;
    a[0]=x;
    b[x]=true;
    len=0;
    fd(gr,x,y,1,a,b);
    for(i=0;i<k+1;i++)
        printf("%d,",c[i]);
    printf("\n");
    printf("the shortest length is %d.\n",min);
}

int main()
{
    int gr[n][n]={
        {0,1,2,0,0,0},
        {1,0,1,3,1,0},
        {2,1,0,0,0,12},
        {0,3,0,0,1,0},
        {0,1,0,1,0,8},
        {0,0,12,0,8,0}};
  int a[n];
  int b[n];
  shortest((int*)gr,0,5,a,b);

    return 0;
}     

自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2005-09-11 20:54
yaoguai2005
Rank: 1
等 级:新手上路
帖 子:168
专家分:0
注 册:2005-9-11
收藏
得分:0 

首先,我要向斑主说声对不起,因为我的疏忽,把原本小的b写成大写的B了,我测试的时候是用小写的测试的,提示*号语法错误, 我按照斑竹给的程序测试了一下.错误共有4处,都怪我给的是错误的程序了,还请斑竹帮忙给看一下把 下面是测试时的程序,绝对没错一个字母,还是老问题,仍然提示:说明语法错误 #include"stdio.h" #define MAX_LEN 10000 #define n 6 int len; //当前走过的犁镜的权值和 int min;//当前找到的最短路径的和 int k;//当前最短的步数 int c[n];//最短路 //递归子过程,从X到Y,总步数为Z void fd(int*gr,int x,int y,int z,int*a,bool*b) //这句里bool*b中间的*号被提示错误.错误提示是说:说明语法错误.而且只有*号变成兰色,bool和b都好好的,在*号的下面有一道蓝线提示*号错误,请大家指点这个*号到底错在啥地方了\如何修改呢这个语句,这个程序里就这一个错误了,还请大家指点.这是个求最短路径的小程序,我找了半个月才找见的.谢谢 { int f,j; for(f=0;f<n;f++){ //让F从0到N-1寻找邻结点 if(gr[x*n+f]>0&&b[f]==false){ //判断是否F点在X邻域并且F点没有走过 a[z]=f; //走到F点(F点进栈) b[f]=true; //记录F点已经走过 len=len+gr[x*n+f]; //在当前路径长度中增加新边长 if(f!=y) //如果没有走道Y点就继续走 fd(gr,f,y,z+1,a,b); else if(len<min){//走到Y就看当前长度是否比当前最小长度小,如果当前小就更新 k=z;//先记录下当前犁镜的点数 min=len;//以当前长度作为当前最小长度 for(j=1;j<k+1;j++)//依次更换当前最短路径中的每个点 c[j]=a[j]; }//结束更新 len=len-gr[x*n+f];//退掉F点,先在当前路径长度中减去退出的一条边长 b[f]=false;//把F点恢复为没有走过 }//结束X邻域的搜索 } } //在N个点的网上求X到Y的最短路径,关联距阵是GR

void shortest(int*gr,int x,int y,int*a,bool*b) { int i; min=MAX_LEN; for(i=0;i<n;i++) b[i]=false; a[0]=x; b[x]=true; len=0; fd(gr,x,y,1,a,b); for(i=0;i<k+1;i++) printf("%d,",c[i]); printf("\n"); printf("the shortest length is %d.\n",min); } void main() { int gr[n][n]={{0,1,2,0,0,0}, {1,0,1,3,1,0}, {2,1,0,0,0,12}, {0,3,0,0,1,0}, {0,1,0,1,0,8}, {0,0,12,0,8,0}}; int a[n]; bool b[n]; shortest((int*)gr,0,5,a,b); }

[此贴子已经被作者于2005-9-12 15:44:17编辑过]


2005-09-12 00:57
zorro2zzz
Rank: 1
等 级:新手上路
威 望:1
帖 子:96
专家分:0
注 册:2005-9-11
收藏
得分:0 
倒……这个……这个是用来算什么的啊……

编程是啥东西,让俺瞧瞧……
2005-09-12 01:37
zorro2zzz
Rank: 1
等 级:新手上路
威 望:1
帖 子:96
专家分:0
注 册:2005-9-11
收藏
得分:0 
我这里测试没有错……
只是算出来结果不知道是什么而已……

[此贴子已经被作者于2005-9-12 2:00:48编辑过]



编程是啥东西,让俺瞧瞧……
2005-09-12 01:40
zorro2zzz
Rank: 1
等 级:新手上路
威 望:1
帖 子:96
专家分:0
注 册:2005-9-11
收藏
得分:0 
顺便问一下,x和y是表示啥意思恩?

编程是啥东西,让俺瞧瞧……
2005-09-12 02:00
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
收藏
得分:0 
yaoguai2005, 我二楼的代码你运行过没有,应该可以得到结果的,我只是不知道 应该值 是什么,不过我想你自己应该清楚。那个bool * b, 是不可以的,所以我将它改成 int * b 了,但是没有破坏你的逻辑结构,所以你的逻辑正确的话,结果就应该是对的。

自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2005-09-12 04:55
yaoguai2005
Rank: 1
等 级:新手上路
帖 子:168
专家分:0
注 册:2005-9-11
收藏
得分:0 
这是个求任意2点最短路径的算法,在这个程序里,求的是标号0顶点到标号5顶点的最短路径,
这条路一共有6个顶点相连.
最后程序运行的结果应该是
0,1,4,5.
the shortest length is 10
意思是说走0.1.4.5这个路线是最短的路径,权值加起来是10,
如果已公里做计算单位的话,也就是说这条路共是10公里.
x和y是定义未知顶点的.
斑竹,我在测试一下看看.昨晚用C2.0测试,你给的程序错误有8处,警告4处.
不知道你是用什么工具测试的\
我现在马上在测试一下.
结果马上就出来,
多谢大家的指点

2005-09-12 13:27
zorro2zzz
Rank: 1
等 级:新手上路
威 望:1
帖 子:96
专家分:0
注 册:2005-9-11
收藏
得分:0 
我把shortest((int*)gr,0,5,a,b);中5改为3后,再运行,结果路径为0.1.4.3,the shortest length is 3……

[此贴子已经被作者于2005-9-12 13:48:23编辑过]



编程是啥东西,让俺瞧瞧……
2005-09-12 13:46
yaoguai2005
Rank: 1
等 级:新手上路
帖 子:168
专家分:0
注 册:2005-9-11
收藏
得分:0 
你运行的结果完全正确,结果是3,路径0。1。4。3也对。
你是用啥软件测试的呀,用的是几楼的原程序测试的呢、
是用斑竹的程序吗、有没有经过修改呀
我用TC2.0运行斑竹的程序,老是提示错误,
刚才我测试,用了2个不同版本的TC2.0测试的,
错误有4个,就是凡是出现false和true的语句,就有错误,一共有4处,
系统提示没有定义,请问楼上的朋友,你是在什么环境下测试的,告诉我好吗
我用自己帖上去的程序运行,错误有一个,是说明语法错误,难死我了,,


[此贴子已经被作者于2005-9-12 15:28:18编辑过]



2005-09-12 15:25
快速回复:语法有一个字母错误,哪位兄台给看一下把.有详细介绍
数据加载中...
 
   



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

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