如何写出表示四种图的类型的函数void Graph_Kind(GraphKind x)
时间: 2024-02-21 14:01:44 浏览: 18
可以通过switch语句实现,代码如下:
```c
void Graph_Kind(GraphKind x) {
switch(x) {
case DG:
printf("有向图\n");
break;
case DN:
printf("有向网\n");
break;
case UDG:
printf("无向图\n");
break;
case UDN:
printf("无向网\n");
break;
default:
printf("错误类型\n");
break;
}
}
```
其中,DG表示有向图,DN表示有向网,UDG表示无向图,UDN表示无向网。函数根据传入的参数x,输出对应图的类型名称。如果参数x不属于这四种类型,则输出错误类型。
相关问题
如何写出包含四种图的创建void Create_MGraph(MGraph *G)
可以通过用户输入图的相关信息,创建对应的图。代码如下:
```c
void Create_MGraph(MGraph *G) {
printf("请输入图的类型:\n");
Graph_Kind(G->kind); // 调用上面的函数,输出图的类型名称
printf("请输入图的顶点数和边数:\n");
scanf("%d %d", &G->vexnum, &G->arcnum);
printf("请输入图的各个顶点:\n");
for(int i = 0; i < G->vexnum; i++) {
scanf("%s", G->vexs[i]);
}
printf("请输入图的各个边及其权值:\n");
for(int i = 0; i < G->vexnum; i++) {
for(int j = 0; j < G->vexnum; j++) {
G->arcs[i][j].adj = INFINITY; // 初始化为无穷大
G->arcs[i][j].info = NULL; // 初始化为空
}
}
for(int k = 0; k < G->arcnum; k++) {
char v1[MAX_VERTEX_NUM], v2[MAX_VERTEX_NUM];
VRType w;
printf("请输入第%d条边的顶点及其权值:\n", k+1);
scanf("%s %s %d", v1, v2, &w);
int i = LocateVex(*G, v1);
int j = LocateVex(*G, v2);
G->arcs[i][j].adj = w;
if(G->kind == UDG || G->kind == UDN) { // 如果是无向图或无向网,对称位置也要赋值
G->arcs[j][i] = G->arcs[i][j];
}
}
}
```
其中,MGraph是一个结构体,包含图的类型、顶点数、边数、各个顶点和各个边及其权值。在函数中,首先要求用户输入图的类型、顶点数和边数,然后输入各个顶点和各个边及其权值。具体实现时,需要用到LocateVex函数,用于查找顶点在图中的位置。
写出emwin中GRAPH_Invalidate函数
GRAPH_Invalidate函数用于标记指定的窗口区域无效,需要重新绘制。函数原型如下:
```
void GRAPH_Invalidate(WM_HWIN hWin, const GUI_RECT *pRect);
```
其中,参数hWin为窗口句柄,参数pRect为指向矩形结构体的指针,表示需要标记为无效的矩形区域。如果该参数为NULL,则表示整个窗口区域都需要标记为无效。
函数调用示例:
```
GUI_RECT rect = {10, 10, 50, 50};
GRAPH_Invalidate(hWin, &rect);
```
以上代码表示标记窗口hWin中左上角坐标为(10, 10),右下角坐标为(50, 50)的矩形区域为无效,需要重新绘制。