试在邻接矩阵存储结构上实现图的基本操作:InsertVex(G,v),InsertArc (G,v,w), DeleteVex(G ,v)和DeleteArc(G,v,w)。

时间: 2023-03-20 16:01:47 浏览: 130
邻接矩阵是一种图的存储结构,可以用二维数组来表示。对于无向图,邻接矩阵是一个对称矩阵,对角线上的元素表示每个节点自身的信息;而对于有向图,则是一个非对称矩阵。 在邻接矩阵存储结构上,实现图的基本操作如下: 1. InsertVex(G,v):在邻接矩阵G中添加新的节点v。具体实现是,将G的行数和列数分别增加1,然后在矩阵的最后一列和最后一行分别添加新的元素,表示与新节点相连的边的信息(如果是无向图,则在对称位置也添加该信息)。 2. InsertArc(G,v,w):在邻接矩阵G中添加一条从节点v到节点w的有向边。具体实现是,在G的第v行第w列位置添加边的信息。 3. DeleteVex(G,v):删除邻接矩阵G中的节点v。具体实现是,将G的第v行和第v列删除,然后将剩余节点的编号重新编号(如果是无向图,则对称位置的信息也要删除)。 4. DeleteArc(G,v,w):删除邻接矩阵G中从节点v到节点w的有向边。具体实现是,将G的第v行第w列的边信息删除。
相关问题

试在邻接矩阵存储结构上实现图的基本操作:InsertVex(G,v),InsertArc(G,v,w),DeleteVex(G,v)和DeleteArc(G,v,w).

### 回答1: 邻接矩阵是一种常见的图的存储方式,基本操作包括InsertVex(G,v),InsertArc(G,v,w),DeleteVex(G,v)和DeleteArc(G,v,w)。 其中,InsertVex(G,v)操作是在图G中插入一个新的顶点v,需要在邻接矩阵中增加一行一列。具体实现可以先创建一个大小为G.n+1的新矩阵,将原来的矩阵复制到新矩阵中,然后再将新的一行一列初始化为0即可。 InsertArc(G,v,w)操作是在图G中插入一条从v到w的有向边,需要将邻接矩阵中对应位置的值修改为1。如果是无向图,则同时需要修改邻接矩阵中w到v的位置。如果原来该位置的值为1,则表示原来已经有一条边,此时可以选择覆盖原来的边或者忽略该操作。 DeleteVex(G,v)操作是从图G中删除顶点v及其相关的边,需要将邻接矩阵中第v行第v列删除,并将其它行列的值向前移动。具体实现可以先将第v行和第v列设置为0,然后将后面的行列依次向前移动即可。 DeleteArc(G,v,w)操作是从图G中删除从v到w的有向边,需要将邻接矩阵中对应位置的值修改为0。如果是无向图,则同时需要修改邻接矩阵中w到v的位置。如果原来该位置的值为0,则表示原来不存在该边,此时可以选择忽略该操作。 ### 回答2: 邻接矩阵是一种常用的图的存储结构,可以用于实现图的基本操作。 首先,定义邻接矩阵G,其中G是一个大小为n*n的二维数组,n表示顶点的个数。初始时,邻接矩阵G中的元素都为0,表示没有边相连。 1. InsertVex(G,v):在邻接矩阵G中插入一个新的顶点v。 - 首先,将n加1,表示顶点个数增加了。 - 然后,在邻接矩阵G中新增一行和一列,表示顶点v与其他顶点的关系。 - 最后,元素初始化为0,即没有边相连。 2. InsertArc(G,v,w):向邻接矩阵G中插入一条由顶点v指向顶点w的边。 - 找到顶点v和顶点w在邻接矩阵中的对应位置(v对应的行,w对应的列)。 - 将该位置的元素设为1,表示存在一条边。 3. DeleteVex(G,v):在邻接矩阵G中删除顶点v以及与之相关的边。 - 首先,将顶点v所在的行和列删除,即将n减1。 - 然后,将邻接矩阵G中与顶点v相关的行和列删除。 - 最后,更新邻接矩阵G中相关顶点的位置。 4. DeleteArc(G,v,w):删除邻接矩阵G中顶点v指向顶点w的边。 - 找到顶点v和顶点w在邻接矩阵中的对应位置(v对应的行,w对应的列)。 - 将该位置的元素设为0,表示不存在边。 通过以上操作,我们可以在邻接矩阵存储结构上实现图的基本操作,包括插入顶点、插入边、删除顶点和删除边。这些操作都能在O(1)的时间内完成,因为只需修改邻接矩阵中的某个元素。但是,邻接矩阵的缺点是空间复杂度较高,且不适用于存储稀疏图。 ### 回答3: 邻接矩阵是一种常用的图的存储结构,可以用于实现图的基本操作,包括插入顶点、插入边、删除顶点和删除边。 插入顶点操作InsertVex(G,v):首先,为了插入一个新的顶点v,我们需要在邻接矩阵G中增加一行和一列,表示与该顶点相关的边的信息。然后,我们需要修改其他顶点的编号,使得它们与扩展后的邻接矩阵保持一致。 插入边操作InsertArc(G,v,w):插入边操作需要修改邻接矩阵中对应顶点v和w的位置,将它们之间的关系标记为存在边。具体地,我们可以将邻接矩阵中v行w列和w行v列的值设置为1,表示存在一条边。 删除顶点操作DeleteVex(G,v):删除顶点操作需要首先将顶点v所在行和列的信息从邻接矩阵中删除。然后,我们需要修改其他顶点的编号,以保持邻接矩阵的一致性。 删除边操作DeleteArc(G,v,w):删除边操作需要将邻接矩阵中v行w列和w行v列的值设置为0,表示不存在边。 总结起来,邻接矩阵存储结构上实现图的基本操作与矩阵的增删改查操作相似。通过对邻接矩阵中的值进行修改,可以实现图的动态调整,包括插入顶点、插入边、删除顶点和删除边。这些操作能够保持邻接矩阵的一致性,并且能够正确地更新图的结构和关系。

C语言 写代码在邻接矩阵存储结构上实现图的基本操作: InsertVex(G,v),InsertArc(G,v,w),DeleteVex(G,v)和 DeleteArc(G,v,w)。

好的,以下是C语言代码实现邻接矩阵存储结构上的图基本操作: ```c #include <stdio.h> #include <stdlib.h> // 定义最大顶点数 #define MAX_VERTEX_NUM 100 // 定义邻接矩阵存储结构 typedef struct { int vexs[MAX_VERTEX_NUM]; // 存放顶点信息 int arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 存放边信息 int vexnum, arcnum; // 顶点数和边数 } GraphMatrix; // 初始化图 void InitGraph(GraphMatrix *G) { int i, j; G->vexnum = G->arcnum = 0; for (i = 0; i < MAX_VERTEX_NUM; i++) { for (j = 0; j < MAX_VERTEX_NUM; j++) { G->arcs[i][j] = 0; } } } // 插入顶点 void InsertVex(GraphMatrix *G, int v) { G->vexs[G->vexnum++] = v; } // 插入边 void InsertArc(GraphMatrix *G, int v, int w) { int i, j; for (i = 0; i < G->vexnum; i++) { if (G->vexs[i] == v) break; } for (j = 0; j < G->vexnum; j++) { if (G->vexs[j] == w) break; } G->arcs[i][j] = G->arcs[j][i] = 1; G->arcnum++; } // 删除顶点 void DeleteVex(GraphMatrix *G, int v) { int i, j; for (i = 0; i < G->vexnum; i++) { if (G->vexs[i] == v) break; } for (j = 0; j < G->vexnum; j++) { if (G->arcs[i][j]) { G->arcs[i][j] = G->arcs[j][i] = 0; G->arcnum--; } } for (; i < G->vexnum - 1; i++) { G->vexs[i] = G->vexs[i + 1]; } G->vexnum--; } // 删除边 void DeleteArc(GraphMatrix *G, int v, int w) { int i, j; for (i = 0; i < G->vexnum; i++) { if (G->vexs[i] == v) break; } for (j = 0; j < G->vexnum; j++) { if (G->vexs[j] == w) break; } G->arcs[i][j] = G->arcs[j][i] = 0; G->arcnum--; } // 测试代码 int main() { GraphMatrix G; InitGraph(&G); // 插入顶点 InsertVex(&G, 1); InsertVex(&G, 2); InsertVex(&G, 3); InsertVex(&G, 4); // 插入边 InsertArc(&G, 1, 2); InsertArc(&G, 1, 3); InsertArc(&G, 2, 4); InsertArc(&G, 3, 4); // 删除顶点和边 DeleteVex(&G, 3); DeleteArc(&G, 1, 2); return 0; } ``` 以上是实现邻接矩阵存储结构上的图基本操作的C语言代码,其中包括插入顶点、插入边、删除顶点和删除边四个基本操作。

相关推荐

好的,针对您的问题,我可以给出如下实现: 假设邻接矩阵存储结构为: c++ #define MaxVertexNum 100 //最大顶点数 typedef int Vertex; //顶点类型 typedef int WeightType; //边的权值类型 typedef char DataType; //顶点储存的数据类型 typedef struct GNode *PtrToGNode; struct GNode{ int Nv; //顶点数 int Ne; //边数 WeightType G[MaxVertexNum][MaxVertexNum]; //邻接矩阵 DataType Data[MaxVertexNum]; //存顶点的数据 }; typedef PtrToGNode MGraph; //以邻接矩阵存储的图类型 其中,G[i][j]表示顶点i和顶点j之间的边的权重,如果G[i][j]==0,表示i和j之间没有边相连。 InsertVex(G,v)的实现: c++ bool InsertVex(MGraph &G, Vertex v) { if (G->Nv==MaxVertexNum) return false; //顶点已满,无法插入 G->Data[G->Nv]=v; //插入顶点v的数据 for (int i=0; i<=G->Nv; i++) { G->G[i][G->Nv]=0; //初始化新顶点与其他顶点之间的边 G->G[G->Nv][i]=0; //初始化其他顶点与新顶点之间的边 } G->Nv++; //顶点数加1 return true; } InsertArc(G,v,w)的实现: c++ bool InsertArc(MGraph &G, Vertex v, Vertex w, WeightType weight) { if (v<0 || v>=G->Nv || w<0 || w>=G->Nv) return false; //v或w越界,无法插入边 if (G->G[v][w]!=0) return false; //边<v, w>已存在,无法插入 G->G[v][w]=weight; //插入边<v, w> G->Ne++; //边数加1 return true; } DeleteVex(G,v)的实现: c++ bool DeleteVex(MGraph &G, Vertex v) { if (v<0 || v>=G->Nv) return false; //v越界,无法删除 for (int i=0; i<G->Nv; i++) { if (G->G[i][v]!=0) { //如果存在边<i, v>,则删除边<i, v> G->G[i][v]=0; G->Ne--; } if (G->G[v][i]!=0) { //如果存在边<v, i>,则删除边<v, i> G->G[v][i]=0; G->Ne--; } } G->Data[v]=0; //删除顶点v的数据 for (int i=v; i<G->Nv-1; i++) { G->Data[i]=G->Data[i+1]; //顶点数据前移 } for (int i=0; i<G->Nv; i++) { for (int j=v; j<G->Nv-1; j++) { G->G[i][j]=G->G[i][j+1]; //邻接矩阵中顶点前移 } } for (int i=0; i<G->Nv; i++) { G->G[i][G->Nv-1]=0; //清空新顶点所在的列 G->G[G->Nv-1][i]=0; //清空新顶点所在的行 } G->Nv--; //顶点数减1 return true; } DeleteArc(G,v,w)的实现: c++ bool DeleteArc(MGraph &G, Vertex v, Vertex w) { if (v<0 || v>=G->Nv || w<0 || w>=G->Nv) return false; //v或w越界,无法删除边 if (G->G[v][w]==0) return false; //边<v, w>不存在,无法删除 G->G[v][w]=0; //删除边<v, w> G->Ne--; //边数减1 return true; } 以上就是在邻接矩阵存储结构上实现图的基本操作InsertVex(G,v)、InsertArc(G,v,w)、DeleteVex(G,v)、DeleteArc(G,v,w)的代码实现。
好的,我来给你编写算法在邻接矩阵存储结构上实现图的基本操作。 首先,我们需要定义邻接矩阵的数据结构: #define MAX_VERTEX_NUM 20 // 顶点数的最大值 typedef struct { char vexs[MAX_VERTEX_NUM]; // 顶点数组 int arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 邻接矩阵,用二维数组表示 int vexnum, arcnum; // 图的当前顶点数和边数 } MGraph; 然后,我们可以按照以下算法实现四个基本操作: InsertVex(G,v): bool InsertVex(MGraph &G, char v) { if (G.vexnum == MAX_VERTEX_NUM) { return false; // 顶点数已满,无法插入 } G.vexs[G.vexnum++] = v; // 在顶点数组中添加新的顶点 for (int i = 0; i < G.vexnum; i++) { G.arcs[i][G.vexnum - 1] = 0; // 新顶点到其他顶点的边初始化为0 G.arcs[G.vexnum - 1][i] = 0; // 其他顶点到新顶点的边初始化为0 } return true; } InsertArc(G,v,w): bool InsertArc(MGraph &G, char v, char w) { int i = LocateVex(G, v); int j = LocateVex(G, w); if (i == -1 || j == -1) { return false; // 顶点不存在,无法插入边 } G.arcs[i][j] = 1; // 添加从v到w的边 if (!G.is_directed) { G.arcs[j][i] = 1; // 如果是无向图,还要添加从w到v的边 } G.arcnum++; // 边数加一 return true; } DeleteVex(G,v): bool DeleteVex(MGraph &G, char v) { int i = LocateVex(G, v); if (i == -1) { return false; // 顶点不存在,无法删除 } for (int j = 0; j < G.vexnum; j++) { if (G.arcs[i][j] != 0) { G.arcnum--; // 删除从v出发的边,边数减一 } if (G.arcs[j][i] != 0) { G.arcnum--; // 删除到v的边,边数减一 } } for (int j = i + 1; j < G.vexnum; j++) { G.vexs[j - 1] = G.vexs[j]; // 删除顶点v,顶点数组整体向前移动一位 } for (int j = i + 1; j < G.vexnum; j++) { for (int k = 0; k < G.vexnum; k++) { G.arcs[j - 1][k] = G.arcs[j][k]; // 删除顶点v,邻接矩阵整体向上移动一行 } } for (int j = i + 1; j < G.vexnum; j++) { for (int k = 0; k < G.vexnum; k++) { G.arcs[k][j - 1] = G.arcs[k][j]; // 删除顶点v,邻接矩阵整体向左移动一列 } } G.vexnum--; // 顶点数减一 return true; } DeleteArc(G,v,w): bool DeleteArc(MGraph &G, char v, char w) { int i = LocateVex(G, v); int j = LocateVex(G, w); if (i == -1 || j == -1) { return false; // 顶点不存在,无法删除边 } G.arcs[i][j] = 0; // 删除从v到w的边 if (!G.is_directed) { G.arcs[j][i] = 0; // 如果是无向图,还要删除从w到v的边 } G.arcnum--; // 边数减一 return true; } 以上就是在邻接矩阵存储结构上实现图的基本操作的算法,希望能对你有所帮助。
好的,我来为您解答这个问题。 在邻接矩阵存储结构上实现图的基本操作,可以使用以下结构体表示: c #define MAX_VERTEX_NUM 20 typedef char VexType; typedef int ArcType; typedef struct { VexType vexs[MAX_VERTEX_NUM]; // 存储顶点信息 ArcType arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 存储边的信息 int vexnum, arcnum; // 存储顶点数和边数 } AdjMatrix; 其中,顶点信息使用VexType类型表示,边的信息使用ArcType类型表示。vexnum和arcnum分别表示图中顶点数和边数。 接下来,我们就可以实现四种基本操作: 1. Insert Vex ( G , v) c void InsertVex(AdjMatrix *G, VexType v) { if (G->vexnum >= MAX_VERTEX_NUM) { printf("Error: The graph is full!\n"); return; } G->vexs[G->vexnum] = v; for (int i = 0; i < G->vexnum; i++) { G->arcs[i][G->vexnum] = 0; G->arcs[G->vexnum][i] = 0; } G->vexnum++; } 2. Insert Arc (G,v,w) c void InsertArc(AdjMatrix *G, VexType v, VexType w) { int vpos = -1, wpos = -1; for (int i = 0; i < G->vexnum; i++) { if (G->vexs[i] == v) { vpos = i; } if (G->vexs[i] == w) { wpos = i; } if (vpos != -1 && wpos != -1) { break; } } if (vpos == -1 || wpos == -1) { printf("Error: The vertex does not exist!\n"); return; } G->arcs[vpos][wpos] = 1; G->arcnum++; } 3. DeleteVex(G,v) c void DeleteVex(AdjMatrix *G, VexType v) { int vpos = -1; for (int i = 0; i < G->vexnum; i++) { if (G->vexs[i] == v) { vpos = i; break; } } if (vpos == -1) { printf("Error: The vertex does not exist!\n"); return; } for (int i = 0; i < G->vexnum; i++) { if (i != vpos) { G->arcs[i][vpos] = 0; G->arcs[vpos][i] = 0; } } for (int i = vpos; i < G->vexnum - 1; i++) { G->vexs[i] = G->vexs[i+1]; } G->vexnum--; for (int i = 0; i < G->arcnum; i++) { if (G->arcs[i][vpos] == 1 || G->arcs[vpos][i] == 1) { for (int j = i; j < G->arcnum - 1; j++) { G->arcs[j][vpos] = G->arcs[j+1][vpos]; G->arcs[vpos][j] = G->arcs[vpos][j+1]; } G->arcnum--; i--; } } } 4. DeleteArc(G,v,w) c void DeleteArc(AdjMatrix *G, VexType v, VexType w) { int vpos = -1, wpos = -1; for (int i = 0; i < G->vexnum; i++) { if (G->vexs[i] == v) { vpos = i; } if (G->vexs[i] == w) { wpos = i; } if (vpos != -1 && wpos != -1) { break; } } if (vpos == -1 || wpos == -1) { printf("Error: The vertex does not exist!\n"); return; } if (G->arcs[vpos][wpos] == 0) { printf("Error: The arc does not exist!\n"); return; } G->arcs[vpos][wpos] = 0; G->arcnum--; } 以上代码为邻接矩阵存储结构上实现图的基本操作,其中MAX_VERTEX_NUM为最大顶点数,可以根据需要修改。
好的,我可以为您解答这个问题。 在邻接矩阵存储结构中,我们可以用二维数组来表示图,其中数组的行和列分别代表图中的顶点。如果顶点之间存在边,则数组元素的值为1,否则为0。 以下是用C语言实现图的基本操作的代码: #include <stdio.h> #include <stdlib.h> #define MaxVertexNum 100 // 最大顶点数 typedef int Vertex; // 顶点类型 typedef int WeightType; // 边的权重类型 typedef struct { Vertex V[MaxVertexNum]; // 顶点数组 WeightType G[MaxVertexNum][MaxVertexNum]; // 邻接矩阵 int N, E; // 顶点数和边数 } MGraph; // 插入顶点 void InsertVex(MGraph *G, Vertex v) { if (G->N == MaxVertexNum) { printf("图的顶点数已达到最大值,无法插入新顶点!\n"); return; } G->V[G->N++] = v; } // 插入边 void InsertArc(MGraph *G, Vertex v, Vertex w, WeightType weight) { int i, j; for (i = 0; i < G->N; i++) { if (G->V[i] == v) { break; } } for (j = 0; j < G->N; j++) { if (G->V[j] == w) { break; } } if (i == G->N || j == G->N) { printf("输入的顶点不存在!\n"); return; } G->G[i][j] = weight; G->E++; } // 删除顶点 void DeleteVex(MGraph *G, Vertex v) { int i, j, k; for (i = 0; i < G->N; i++) { if (G->V[i] == v) { break; } } if (i == G->N) { printf("输入的顶点不存在!\n"); return; } for (j = 0; j < G->N; j++) { if (G->G[i][j] != 0) { G->E--; } } for (j = 0; j < G->N; j++) { G->G[i][j] = 0; G->G[j][i] = 0; } G->N--; for (k = i; k < G->N; k++) { G->V[k] = G->V[k + 1]; } } // 删除边 void DeleteArc(MGraph *G, Vertex v, Vertex w) { int i, j; for (i = 0; i < G->N; i++) { if (G->V[i] == v) { break; } } for (j = 0; j < G->N; j++) { if (G->V[j] == w) { break; } } if (i == G->N || j == G->N) { printf("输入的顶点不存在!\n"); return; } if (G->G[i][j] == 0) { printf("输入的边不存在!\n"); return; } G->G[i][j] = 0; G->E--; } int main() { MGraph G; G.N = 0; G.E = 0; // 插入顶点 InsertVex(&G, 1); InsertVex(&G, 2); InsertVex(&G, 3); // 插入边 InsertArc(&G, 1, 2, 1); InsertArc(&G, 2, 3, 2); // 删除顶点 DeleteVex(&G, 2); // 删除边 DeleteArc(&G, 1, 2); return 0; } 以上代码中,InsertVex、InsertArc、DeleteVex、DeleteArc四个函数分别实现了插入顶点、插入边、删除顶点、删除边的操作。在主函数中,我们先插入了三个顶点,然后插入了两条边,接着删除了一个顶点和一条边。
以下是基于邻接矩阵存储结构的C语言代码实现了图的基本操作: c #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #define MAX_VERTEX_NUM 20 #define INF 65535 typedef struct { char vexs[MAX_VERTEX_NUM]; // 顶点信息 int arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 邻接矩阵 int vexnum, arcnum; // 顶点数目和弧的数目 } MGraph; // 初始化邻接矩阵 void init(MGraph *G) { G->vexnum = 0; G->arcnum = 0; for (int i = 0; i < MAX_VERTEX_NUM; i++) { G->vexs[i] = ' '; for (int j = 0; j < MAX_VERTEX_NUM; j++) { G->arcs[i][j] = INF; } } } // 插入一个顶点 void insertVex(MGraph *G, char v) { if (G->vexnum == MAX_VERTEX_NUM) { printf("插入失败,顶点数已达到上限!\n"); return; } G->vexs[G->vexnum++] = v; // 将新顶点添加到顶点信息数组中 } // 插入一条弧 void insertArc(MGraph *G, char v, char w) { int i = locateVex(G, v); int j = locateVex(G, w); if (i == -1 || j == -1) { printf("插入失败,顶点不存在!\n"); return; } if (G->arcs[i][j] != INF) { printf("插入失败,该弧已经存在!\n"); return; } G->arcs[i][j] = 1; // 将新弧添加到邻接矩阵中 G->arcnum++; } // 删除一个顶点 void deleteVex(MGraph *G, char v) { int i = locateVex(G, v); if (i == -1) { printf("删除失败,顶点不存在!\n"); return; } // 删除该顶点的所有弧 for (int j = 0; j < G->vexnum; j++) { if (G->arcs[i][j] != INF) { G->arcs[i][j] = INF; G->arcnum--; } if (G->arcs[j][i] != INF) { G->arcs[j][i] = INF; G->arcnum--; } } // 将该顶点从顶点信息数组中删除 for (int j = i; j < G->vexnum - 1; j++) { G->vexs[j] = G->vexs[j + 1]; } G->vexnum--; } // 删除一条弧 void deleteArc(MGraph *G, char v, char w) { int i = locateVex(G, v); int j = locateVex(G, w); if (i == -1 || j == -1) { printf("删除失败,顶点不存在!\n"); return; } if (G->arcs[i][j] == INF) { printf("删除失败,该弧不存在!\n"); return; } G->arcs[i][j] = INF; // 将该弧从邻接矩阵中删除 G->arcnum--; } // 定位一个顶点在顶点信息数组中的位置 int locateVex(MGraph *G, char v) { for (int i = 0; i < G->vexnum; i++) { if (G->vexs[i] == v) { return i; } } return -1; } // 测试函数 int main() { MGraph G; init(&G); insertVex(&G, 'A'); insertVex(&G, 'B'); insertVex(&G, 'C'); insertArc(&G, 'A', 'B'); insertArc(&G, 'B', 'C'); deleteArc(&G, 'A', 'B'); deleteVex(&G, 'B'); return 0; } 该代码实现了四个基本操作:插入顶点、插入弧、删除顶点和删除弧。其中,插入顶点和插入弧分别将新顶点和新弧添加到邻接矩阵中;删除顶点将该顶点的所有弧从邻接矩阵中删除,并将该顶点从顶点信息数组中删除;删除弧将该弧从邻接矩阵中删除。

最新推荐

干货!MySQL 数据库开发规范.docx

你真的会写一手好SQL吗?你真的深入了解数据库吗?你真的对MYSQL很理解吗?来自一线大厂资深数据库开发工程师的分享,纯粹干货,值得拥有。

数据库基础创建的时候错误信息排查

创建的时候错误信息排查

电动车与储能2023年二季度投资策略:行业竞争加剧,关注需求复苏.pdf

电动车与储能2023年二季度投资策略:行业竞争加剧,关注需求复苏.pdf

合同管理台账 (1).xls

合同管理台账 (1).xls

RBF分类MATLAB程序(含完整程序及数据)

RBF分类matlab程序,注释详细,亲测好用!

基于51单片机的usb键盘设计与实现(1).doc

基于51单片机的usb键盘设计与实现(1).doc

"海洋环境知识提取与表示:专用导航应用体系结构建模"

对海洋环境知识提取和表示的贡献引用此版本:迪厄多娜·察查。对海洋环境知识提取和表示的贡献:提出了一个专门用于导航应用的体系结构。建模和模拟。西布列塔尼大学-布雷斯特,2014年。法语。NNT:2014BRES0118。电话:02148222HAL ID:电话:02148222https://theses.hal.science/tel-02148222提交日期:2019年HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire论文/西布列塔尼大学由布列塔尼欧洲大学盖章要获得标题西布列塔尼大学博士(博士)专业:计算机科学海洋科学博士学院对海洋环境知识的提取和表示的贡献体系结构的建议专用于应用程序导航。提交人迪厄多内·察察在联合研究单位编制(EA编号3634)海军学院

react中antd组件库里有个 rangepicker 我需要默认显示的当前月1号到最后一号的数据 要求选择不同月的时候 开始时间为一号 结束时间为选定的那个月的最后一号

你可以使用 RangePicker 的 defaultValue 属性来设置默认值。具体来说,你可以使用 moment.js 库来获取当前月份和最后一天的日期,然后将它们设置为 RangePicker 的 defaultValue。当用户选择不同的月份时,你可以在 onChange 回调中获取用户选择的月份,然后使用 moment.js 计算出该月份的第一天和最后一天,更新 RangePicker 的 value 属性。 以下是示例代码: ```jsx import { useState } from 'react'; import { DatePicker } from 'antd';

基于plc的楼宇恒压供水系统学位论文.doc

基于plc的楼宇恒压供水系统学位论文.doc

"用于对齐和识别的3D模型计算机视觉与模式识别"

表示用于对齐和识别的3D模型马蒂厄·奥布里引用此版本:马蒂厄·奥布里表示用于对齐和识别的3D模型计算机视觉与模式识别[cs.CV].巴黎高等师范学校,2015年。英语NNT:2015ENSU0006。电话:01160300v2HAL Id:tel-01160300https://theses.hal.science/tel-01160300v22018年4月11日提交HAL是一个多学科的开放获取档案馆,用于存放和传播科学研究文件,无论它们是否已这些文件可能来自法国或国外的教学和研究机构,或来自公共或私人研究中心。L’archive ouverte pluridisciplinaire博士之路博士之路博士之路在获得等级时,DOCTEURDE L'ÉCOLE NORMALE SUPERIEURE博士学校ED 386:巴黎中心数学科学Discipline ou spécialité:InformatiquePrésentée et soutenue par:马蒂厄·奥布里le8 may 2015滴度表示用于对齐和识别的Unité derechercheThèse dirigée par陪审团成员équipe WILLOW(CNRS/ENS/INRIA UMR 8548)慕尼黑工业大学(TU Munich�