一.图及相关操作
1.老师的代码(重点关注图相关代码)
结构体
typedef struct Graph{
int** connections;
int numNodes;
}*GraphPtr;
初始化
GraphPtr initGraph(int paraSize,int** paraData){
int i,j;
GraphPtr resultPtr=(GraphPtr)malloc(sizeof(struct Graph));
resultPtr->numNodes=paraSize;
resultPtr->connections=(int**)malloc(paraSize*sizeof(int*));
for (i=0;i<paraSize;i++){
resultPtr->connections[i]=(int*)malloc(paraSize*sizeof(int));
for (j=0;j<paraSize;j++){
resultPtr->connections[i][j]=paraData[i][j];
}
}
return resultPtr;
}
初始化记录数组及深度优先遍历
void initTranverse(GraphPtr paraGraphPtr){
int i;
visitedPtr=(int*)malloc(paraGraphPtr->numNodes*sizeof(int));
for (i=0;i<paraGraphPtr->numNodes;i++){
visitedPtr[i]=0;
}
}
void depthFirstTranverse(GraphPtr paraGraphPtr,int paraNode) {
int i;
visitedPtr[paraNode] = 1;
printf("%d\t",paraNode);
for (i=0;i<paraGraphPtr->numNodes;i++){
if (!visitedPtr[i]){
if (paraGraphPtr->connections[paraNode][i]){
depthFirstTranverse(paraGraphPtr,i);
}
}
}
}
广度优先遍历
void widthFirstTranverse(GraphPtr paraGraphPtr,int paraStart){
int i,j,tempNode;
i=0;
QueuePtr tempQueuePtr=initQueue();
printf("%d\t",paraStart);
visitedPtr[paraStart]=1;
enqueue(tempQueuePtr,paraStart);
while(!isQueueEmpty(tempQueuePtr)){
tempNode=dequeue(tempQueuePtr);
visitedPtr[tempNode]=1;
i++;