php生成数据结构图 php生成数据结构图( 四 )


if(i=rear)
queue[rear++]=p-num;/* 该邻接点即没被访问过,也不在队列中,则入队列 */
p=p-next;/* 找V的下一个邻接点 */
}
}
}
void bfsgraph(adjlist *G)/* 若还有不连通的部分 , 则跳过去访问之 */
{ int i;
for(i=0;iG-vex;i++)
if(!visited[i]) bfs(G,i);
}
main()
{ adjlist G;
cregraph(G,8,0);
bfsgraph(G);
}
最小生成树的算法:
/*求最小生成树的Kruskal算法描述*/
#define MAXE 10
struct edges
{ int bv,tv,w;};/* 边集类型,存储一条边的起始点bv终止顶点tv和权w */
typedef struct edges edgeset[MAXE+1];
int seeks(int set[],int v)
{ int i=v;
while(set[i]0)
i=set[i];
return i;
}
kruskal(edgeset ge,int n,int e)/* ge表示的图是按权值从小到大排列的 */
{ int set[MAXE],v1,v2,i,j;
for(i=1;i=n;i++)
set[i]=0;/* 给set中的每个元素赋初值 */
i=1;/* i表示待获取的生成树中的边数,初值为1 */
j=1;/* j表示ge中的下标,初值为1 */
while(jn i=e)/* 按边权递增顺序,逐边检查该边是否应加入到生成树中 */
{ v1=seeks(set,ge[i].bv);/* 确定顶点v所在的边通集 */
v2=seeks(set,ge[i].tv);
if(v1!=v2)/* 当v1,v2不在同一顶点集合,确定该边应当选入生成树 */
{ printf(" (%d,%d) ",ge[i].bv,ge[i].tv);
set[v1]=v2;
j++;
}
i++;
}
}
main()
{ edgeset e={{0,0,0},{4,5,2},{3,5,3},{1,4,5},{1,2,6},{2,4,7},{2,5,8},{1,3,9},{3,4,9},{1,5,13},{2,3,14}};
kruskal(e,5,10);
}
最短路径的算法:
#define Max 10/* 预设最多顶点数 */
#define INFINITY 1000/* 最大值 */
typedef struct
{ int vexnum,arcnum;/* 顶点数及边或弧的数目 */
char vex[Max];/* 存顶点信息的一维数组 */
int arc[Max][Max];/* 存边信息的二维数组 */
}AdjMatrix;
/* 建立有向图的邻接矩阵表示 */
void Creadjm(AdjMatrix *G)
{ int i,j,k,w;
printf("Input vexarc:");
scanf("%d%d%*c",G-vexnum,G-arcnum);/*输入顶点数和边数,并读掉回车符*/
printf("Input Vexinfo:");
for(k=0;kG-vexnum;k++)
scanf("%c",G-vex[k]);/* 输入代表顶点的字符 */
for(i=0;iG-vexnum;i++)
for(j=0;jG-vexnum;j++)
G-arc[i][j]=INFINITY;/* 初始化邻接矩阵 */
printf("Input %d edges:\n",G-arcnum);
for(k=0;kG-arcnum;k++)
{ scanf("%d%d%d",i,j,w);/* 输入边或弧 */
G-arc[i][j]=w;
}
}
/* 输出用邻接矩阵表示的有向图 */
void list(AdjMatrix *G)
{ int i,j;
for(i=0;iG-vexnum;i++)
{ printf("%6c----",G-vex[i]);/* 先输出顶点信息 */
for(j=0;jG-vexnum;j++)
printf("%4d",G-arc[i][j]);/* 再输出与该顶点有关联的边或弧的信息 */
printf("\n");
}
}
/* 计算从顶点v0到其余各点最短路径算法 */
void dijkstra(AdjMatrix *G,int n,int v0,int d[]) /* d数组存放各顶点最短路径 */
{ int s[Max] ;/* s数组存放顶点是否找到最短路径 */
int i,j,u,mindis;
for(i=0;in;i++)
{ d[i]=G-arc[v0][i];s[i]=0;}
s[v0]=1;
for(i=1;in;i++)
{ mindis=INFINITY;
for(j=0;jn;j++)
if(s[j]==0d[j]mindis) { u=j; mindis=d[j];}
s[u]=1;/* 顶点u已找到最短路径 */
for(j=1;j=n;j++)/* 修改j的最短路径 */
if(s[j]==0d[j]d[u]+G-arc[u][j]) d[j]=d[u]+G-arc[u][j];
}
}
main()
{ AdjMatrix G;
int d[Max],i;
Creadjm(G);
list(G);
dijkstra(G,6,0,d);
for(i=0;iG.vexnum;i++)
printf("%4d",d[i]);
}
PHP做图标,pChart怎么用?。客荚谀睦锸涑觯?/h2>pChart是一个开源的图表生成库 , 主要涉及3个Class: pChart.class , pData.class , pCache.class ,可生成20多种简单或复杂的图表,支持PNG,JPG,GIF通用图片格式 。数据源可以来自于Database,CSV,当然也可以手写 。使用该程序PHP需要开启GD服务,先来看看p

推荐阅读