求十字链表的输出方法
希望能用语言和代码描述 撇开深度优先搜索和广度优先搜索
最好是用语言清晰的描述
[解决办法]
- C/C++ code
p = head;while(p){ down = p; while(down) { print down; down = down->down; } p = p->next;}
[解决办法]
#include<stdio.h>
#include<stdlib.h>
#include<iostream.h>
#define MAX 64 //图中顶点的最大个数
int visited[MAX];
typedef struct arcnode ////边节点
{
int adjvex; ////临节点在顶点向量中的下标
struct arcnode *next; ////指向下一个邻接点的指针
}arcnode,*larcnode;
////////////////////////////////////////////////////////
typedef struct ////顶点节点
{
int vertex; ////顶点信息
arcnode *firstarc; ////指向第一个邻接点的指针
}vernode;
/////////////////////////////////////////////////////////
typedef struct
{
vernode vertices[MAX]; ///////邻节表
int vexnum,arcnum; //////顶点和边的数目
}algraph;
///////////////////////////////////////////////////////////
void createlist(algraph &g)
{
larcnode p;
int i,c,d;
int v1,v2;
printf("请输入顶点的个数和边数\n"); ////////输入顶点的个数
scanf("%d %d",&c,&d);
g.vexnum=c;
g.arcnum=d;
printf("*******************%d",g.arcnum);
printf("*******************%d",g.vexnum);
for(i=0;i<g.vexnum;i++) ///////输入顶点的信息
{g.vertices[i].vertex=i;///////输入顶点的下标
g.vertices[i].firstarc=NULL;///////顶点节点的第一个指针域赋值为null;
}
printf("请输入边的两个顶点\n");
for(i=0;i<g.arcnum;i++) ///////控制两个顶点不能相同,不能超出其下标
{
printf("请输入第%d条边的两个顶点:\n",i+1);
scanf("%d %d",&v1,&v2);
if(v1>(g.vexnum-1) || v2>(g.vexnum-1) ||v1==v2)
{
printf("输入错误,请重新输入\n");
scanf("%d %d",&v1,&v2);
}
p=g.vertices[v1].firstarc; ///////将v1顶点的指针域给p;
p=(arcnode*)malloc(sizeof(arcnode)); ///////为p动态分配内存
p->adjvex=v2; ///////将v2的值给边节点的adjvex域
p->next=g.vertices[v1].firstarc; ///////用头节点
g.vertices[v1].firstarc=p; ///等一下用尾插法试试
p=(arcnode*)malloc(sizeof(arcnode)); ///////再次分配内存空间
p->adjvex=v1; ///////将v1的值赋值给adjvex
p->next=g.vertices[v2].firstarc; ////////头插法,插到顶点为v2的表节点里
g.vertices[v2].firstarc=p;
}
printf("//////////////////////%d",p->adjvex);
}
//////////////////////////////////////////////////////////////
void PrintGraph(algraph &g)
{
int i;
larcnode q;
printf(" 图的邻接表为:\n");
for (i=0;i<g.vexnum;i++)
{
q=g.vertices[i].firstarc; ////////指针
printf("v%d: ",i+1);
while (q!=NULL)
{
printf("[%d]->",q->adjvex);
q=q->next;
}
printf("\n");
}
}
///////////////////////////////////////////////////////////////
int main()
{
algraph g;
createlist(g);
PrintGraph(g);
return 0;
}
////////////////////////////////////////////////////////////////////
这里有个邻接表以及用到了深度优先的算法,楼主参考参考
------解决方案--------------------
转为稀疏矩阵,然后按行、列顺序输出?