| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 426 人关注过本帖
标题:有一个程序调试了好久,希望大家能来看一下啊
只看楼主 加入收藏
王晓明
Rank: 2
等 级:论坛游民
帖 子:40
专家分:62
注 册:2009-3-12
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
有一个程序调试了好久,希望大家能来看一下啊
下面这个程序我调试了半天了,但是还有逻辑错误,据我估计是void creatAdj(int *p1,int *p2)这个函数出了问题
感谢高手们的指点啊,
#include <iostream>
using namespace std;

const int INF=1000;
const int N=100;

typedef struct node
{
    int name;
    struct node *next;
}dingDian;

int V,E;
dingDian *p=new dingDian[V];
dingDian *pv=new dingDian[V];//邻接表的表头
dingDian *pe=new dingDian[3*E];
double a[N][N];//邻接矩阵

void importData();//输入数据
void creatMatric(int *p1,int *p2,double *p3);//创建邻接矩阵
void creatAdj(int *p1);//创建邻接表
int search(int *t,int *r,int m,int *a);
void creatAdj(int *p1,int *p2);//创建邻接表
void outputMatric();//输出邻接矩阵
void outputAdj();//输出邻接表

void importData()//输入数据
{
    cout<<"请输入顶点数: ";
    cin>>V;
    cout<<endl<<"请输入边数: ";
    cin>>E;
    cout<<endl;
   
    int *p1=new int[E];
    int *p2=new int[E];
    double *p3=new double[E];
   
    int i=0;
    cout<<"--------请输入顶点的名称(用阿拉伯数字表示)-----------"<<endl;
    cout<<"--顶点名称只能为0到总共的顶点数(如一共有5个顶点,则这5个顶点为:0,1,2,3,4)--"<<endl;
    do
    {
        cout<<"请输入第"<<i+1<<"个顶点的名称: ";
        cin>>(p+i)->name;
        i++;
    }while(i<V);
    i=0;
    do
    {
        cout<<"请输入第"<<i+1<<"条边及其权值(如a b 3): ";
        cin>>*(p1+i);
        cin>>*(p2+i);
        cin>>*(p3+i);
        i++;
    }while(i<E);
    creatMatric(p1,p2,p3);
    creatAdj(p1,p2);
    return;
}

void creatMatric(int *p1,int *p2,double *p3)//创建邻接矩阵
{
    for(int i=0;i<V;i++)   
    {
        for(int j=0;j<V;j++)
        {
            a[i][j]=INF;
        }
    }
    for(int k=0;k<E;k++)
    {
        a[p1[k]][p2[k]]=p3[k];
        a[p2[k]][p1[k]]=p3[k];
    }
    cout<<"创建邻接矩阵成功!"<<endl;
}
int search(int *t,int *r,int m,int *a)
{
    int n=0;
    for(int i=0;i<E;i++)
    {
        if(t[i]==m)
        {
            a[n]=r[i];
            n++;
        }
        if(r[i]==m)
        {
            a[n]=t[i];
            n++;
        }
    }
    return n;
}
void creatAdj(int *p1,int *p2)//创建邻接表
{
    int j=0;
    int i=0;
    while(i<V&&j<2*E)
    {   
        int b[N]={0};
        int n=search(p1,p2,i,b);
        pv[i].name=p[i].name;
        dingDian *pt=&pv[i];
        int k=0;
        while(k<n)
        {
            pe[j].name=b[k];
            pt->next=&pe[j];
            pt=pt->next;
            k++;
            j++;
           
        }
        pt->next=NULL;
        i++;   
    }
    cout<<"创建邻接表成功!"<<endl;
    return;
}
void outputMatric()//输出邻接矩阵
{
    for(int i=0;i<V;i++)
    {
        for(int j=0;j<V;j++)
        {
            cout<<a[i][j]<<"\t";
        }
        cout<<endl;
    }
    return;
}
void outputAdj()//输出邻接表
{
    for(int i=0;i<V;i++)
    {
        dingDian *t=&pv[i];
        cout<<t->name<<"\t";
        do
        {
            t=t->next;
            cout<<t->name;
        }while(t->next!=NULL);
      
        cout<<endl;
    }
    cout<<endl;
   
    return;
}
int main()
{
   
    char ch;
    int i;
    importData();
    do
    {
        cout<<"-----------菜单栏----------------"<<endl;
        cout<<"0.输出邻接矩阵"<<endl;
        cout<<"1.输出邻接表"<<endl;
        cout<<"你的选择是: ";
        cin>>i;
        if(i>=0&&i<=1)
        {
            switch(i)
            {
            case 0:outputMatric();break;
            case 1:outputAdj();break;
            }
        }
        else
        {
            cout<<"你的输入有误!"<<endl;
        }
        cout<<"你想要继续吗?(y/n): ";
        cin>>ch;
    }while(ch=='y');
    delete []p;
    delete []pv;
    delete []pe;
    return 0;
}
搜索更多相关主题的帖子: 调试 
2009-08-30 17:09
xufen340
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:166
专家分:1351
注 册:2009-8-7
收藏
得分:20 
你在main前定义动态分配问题太大了。
int V,E;
dingDian *p=new dingDian[V];
dingDian *pv=new dingDian[V];//邻接表的表头
dingDian *pe=new dingDian[3*E];

v,e根本没赋值,默认为0,
你这三段也就是
dingDian *p=new dingDian[0];
dingDian *pv=new dingDian[0];
dingDian *pe=new dingDian[0];
每个都没分配任何空间,后面赋值当然有问题。
2009-08-30 19:55
王晓明
Rank: 2
等 级:论坛游民
帖 子:40
专家分:62
注 册:2009-3-12
收藏
得分:0 
嗯,的确如此,现在c++的语法都忘没了,谢谢啦!
2009-08-30 20:21
圣贤、
Rank: 1
等 级:禁止访问
帖 子:25
专家分:1
注 册:2009-8-31
收藏
得分:0 
这么厉害
2009-08-31 13:50
快速回复:有一个程序调试了好久,希望大家能来看一下啊
数据加载中...
 
   



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

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