【发布时间】:2015-07-04 22:56:17
【问题描述】:
我有一个包含双向和单向链接组合的图,我需要找到两个给定节点之间的最短路径,我不能使用任何静态向量或矩阵。
我还需要指定使用的路径中的所有节点。
这是我创建图表的方式,所以每个节点都有一个指向他连接的节点的指针,关于我如何做到这一点的任何想法?我尝试创建另一个结构,沿着所有指针移动,直到找到给定的命运,但这只是一团糟。
struct cel {
int rota1,rota2,rota3,rota4,rota5;
struct cel *p1,*p2,*p3,*p4,*p5;
};
typedef struct cel celula;
celula* newnode(struct cel *p1,struct cel*p2,struct cel*p3,struct cel*p4,struct cel*p5, int rota1,int rota2,int rota3,int rota4,int rota5){
celula* new,*aux;
new= (celula *) malloc( sizeof( celula ));
if(new== NULL)
printf("Erro!");
new->p1=p1;
new->p2=p2;
new->p3=p3;
new->p4=p4;
new->p5=p5;
new->rota1,rota2,rota3,rota4,rota5=0;
aux = new;
return (aux);
}
celula * UTFPR;
celula * JAPAO;
celula * REIDOPAO;
celula * ESTACAO;
UTFPR = newnode(REIDOPAO,JAPAO,ESTACAO,NULL,NULL,1,2,1,0,0);
REIDOPAO = newnode(JAPAO,UTFPR,NULL,NULL,NULL,2,1,0,0,0);
JAPAO = newnode(ESTACAO,UTFPR,REIDOPAO,NULL,NULL,2,2,2,0,0);
ESTACAO = newnode(UTFPR,JAPAO,NULL,NULL,NULL,1,2,0,0,0);
【问题讨论】:
-
标准警告:不要将
void *(例如由malloc()返回)转换为/从其他指针!注意:你不应该使用new。如果您曾经使用 C++ 编译器编译该代码,则会产生错误。 -
@Olaf:一方面我同意这两种说法,另一方面我不得不注意到它们相互矛盾。
-
@MikeMB:现在当我阅读您的评论时,我注意到:-)。你是绝对正确的!但是,与使用
new作为标识符查找错误相比,稍后添加演员表可能会带来更少的麻烦。后者也可能会混淆语法突出显示,正如我们在 SO 上看到的那样(注意new的颜色)。而且我认为如果使用不同的标识符并没有什么坏处,而强制转换 malloc 也可以。 -
@Olaft:我完全同意。