国产成人AV一区二区三区在线_国产成人精品无码免费看_国产成人无码无卡在线观看_国产精品成人A区在线观看_国产日韩精品欧美一区_国产亚洲精品自在久久蜜TV_久草热久草热线频97精品_久久久噜噜噜久久中文福利_久久婷婷五月综合色国产免费观看_日日狠狠久久偷偷色综合0,九一桃色在线观看,久久97精品久久久久久久不卡,国产成人精品亚洲精品

想找一下這段c語言的錯(cuò)誤,,該怎么改,。(詳細(xì)代碼和報(bào)錯(cuò)如下)

訪客2024-12-03 06:53:361

代碼:#include<iostream>#include<stdio.h>#include<string>#include<queue>#include<string.h>#define INFINITY 0X7fffffff#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0using namespace std;#define MAX_VERTEX_NUM 30typedef char InfoType;typedef int Status;typedef int Boolean;typedef string VertexType;typedef enum {DG,DN,UDG,UDN} GraphKind;typedef struct ArcNode///弧(鄰接表){ int adjvex; ///當(dāng)前弧指向的頂點(diǎn) int info; ///權(quán)值 struct ArcNode *nextarc;///下一條當(dāng)前頂點(diǎn)為出度的弧} ArcNode;typedef struct VNode///點(diǎn)(鄰接表){ VertexType data;///結(jié)點(diǎn)名 ArcNode *firstarc;///該點(diǎn)的第一條出邊} VNode,AdjList[MAX_VERTEX_NUM];typedef struct///圖(鄰接表){ AdjList vertices;///點(diǎn)的鄰接表(數(shù)組) int vexnum,arcnum; int kind;} Algraph;Status (*VisitFunc_2)(Algraph G,int v);void ArcAdd_sort(ALGraph &G,int v1,int v2,int w)///從大到小順序建立鄰接表{ ArcNode *p,*h,*q; p=new ArcNode; p->adjvex=v2; p->info=w; p->nextarc=NULL; h=q=***.vertices[v1].firstarc; if(q==NULL)***.vertices[v2].firstarc=p; else { if(p->adjvex > q->adjvex)///鄰接表按結(jié)點(diǎn)序號(hào)從大到小排列 { p->nextarc=q; ***.vertices[v2].firstarc=p; } else { while(***.vertices[v2].firstarc!=NULL&&q->nextarc!=NULL&&p->adjvex < q->adjvex) { h=q; q=q->nextarc; } if(q->nextarc==NULL&&p->adjvex < q->adjvex) q->nextarc=p; else { p->nextarc=q; h->nextarc=p; } } }}void ArcAdd(ALGraph &G,int v1,int v2,int w)///加邊{ ArcNode *p,*q; p=new ArcNode; p->adjvex=v2; p->info=w; p->nextarc=NULL; q=***.vertices[v1].firstarc; if(q==NULL) ***.vertices[v1].firstarc=p;///若第一條依附v2頂點(diǎn)的弧還未存在,新加入的邊作為第一條依附弧 else///否則順著鏈表向后查找 { while(q->nextarc!=NULL) q=q->nextarc; q->nextarc=p; }}int LocateVex_2(ALGraph G,string name)///獲取結(jié)點(diǎn)標(biāo)號(hào){ for(int i=0; i<***.vexnum; i++) if(name==***.vertices[i].data)return i; return -1;}Status CreateDG_2(ALGraph &G)///鄰接表(建立無權(quán)有向圖){ printf("建立無權(quán)有向圖,,請(qǐng)依次輸入總結(jié)點(diǎn)數(shù),、總邊數(shù):"); scanf("%d%d",&***.vexnum,&***.arcnum); printf("請(qǐng)為從1至n個(gè)結(jié)點(diǎn)命名:"); for(int i=0; i<***.vexnum; i++)cin>>***.vertices[i].data,***.vertices[i].firstarc=NULL; string v1,v2; printf("請(qǐng)輸入%d組由左指向右的有向邊:",***.arcnum); for(int k=0; k<***.arcnum; k++) { cin>>v1>>v2; int i=LocateVex_2(G,v1);///獲取標(biāo)號(hào) int j=LocateVex_2(G,v2); ArcAdd(G,i,j,1); } return OK;}Status CreateDN_2(ALGraph &G)///鄰接表(建立帶權(quán)有向網(wǎng)){ printf("建立帶權(quán)有向網(wǎng),,請(qǐng)依次輸入總結(jié)點(diǎn)數(shù)、總邊數(shù):"); scanf("%d%d",&***.vexnum,&***.arcnum); printf("請(qǐng)為從1至n個(gè)結(jié)點(diǎn)命名:"); for(int i=0; i<***.vexnum; i++)cin>>***.vertices[i].data,***.vertices[i].firstarc=NULL; string v1,v2; int w; printf("請(qǐng)輸入%d組由左指向右的有向邊與邊權(quán):",***.arcnum); for(int k=0; k<***.arcnum; k++) { cin>>v1>>v2>>w; int i=LocateVex_2(G,v1);///獲取標(biāo)號(hào) int j=LocateVex_2(G,v2); ArcAdd(G,i,j,w); } return OK;}Status CreateUDG_2(ALGraph &G)///鄰接表(建立無權(quán)無向圖){ printf("建立無權(quán)無向圖,,請(qǐng)依次輸入總結(jié)點(diǎn)數(shù),、總邊數(shù):"); scanf("%d%d",&***.vexnum,&***.arcnum); printf("請(qǐng)為從1至n個(gè)結(jié)點(diǎn)命名:"); for(int i=0; i<***.vexnum; i++)cin>>***.vertices[i].data,***.vertices[i].firstarc=NULL; string v1,v2; printf("請(qǐng)輸入%d組相互依附的兩結(jié)點(diǎn):",***.arcnum); for(int k=0; k<***.arcnum; k++) { cin>>v1>>v2; int i=LocateVex_2(G,v1);///獲取標(biāo)號(hào) int j=LocateVex_2(G,v2); ArcAdd(G,i,j,1);///無向邊 ArcAdd(G,j,i,1); } return OK;}Status CreateUDN_2(ALGraph &G)///鄰接表(建立帶權(quán)無向網(wǎng)){ printf("建立帶權(quán)無向網(wǎng),請(qǐng)依次輸入總結(jié)點(diǎn)數(shù),、總邊數(shù):"); scanf("%d%d",&***.vexnum,&***.arcnum); printf("請(qǐng)為從1至n個(gè)結(jié)點(diǎn)命名:"); for(int i=0; i<***.vexnum; i++)cin>>***.vertices[i].data,***.vertices[i].firstarc=NULL; string v1,v2; int w; printf("請(qǐng)輸入%d組相互依附的兩結(jié)點(diǎn)與邊權(quán):",***.arcnum); for(int k=0; k<***.arcnum; k++) { cin>>v1>>v2>>w; int i=LocateVex_2(G,v1);///獲取標(biāo)號(hào) int j=LocateVex_2(G,v2); ArcAdd(G,i,j,w);///無向邊 ArcAdd(G,j,i,w); } return OK;}int FirstAdjVex(ALGraph G,int v){ if(***.vertices[v].firstarc) return ***.vertices[v].firstarc->adjvex; return -1;}int NextAdjVex(ALGraph G,int v,int w){ ArcNode *p=***.vertices[v].firstarc; while(p->adjvex!=w&&p->nextarc!=NULL)p=p->nextarc; if(p->nextarc==NULL)return -1; return p->nextarc->adjvex;}void DFS_2(ALGraph G,int v)///鄰接表DFS{ visited[v]=TRUE; VisitFunc_2(G,v); for(int w=FirstAdjVex(G,v); w>=0; w=NextAdjVex(G,v,w)) if(!visited[w])DFS_2(G,w);}void DFSTraverse_2(ALGraph G,Status (*Visit)(ALGraph G,int v)){ VisitFunc_2=Visit; printf("請(qǐng)輸入深度優(yōu)先搜索起始結(jié)點(diǎn):"); for(int v=0; v<***.vexnum; v++)visited[v]=FALSE; string st; cin>>st; int tmp=LocateVex_2(G,st); printf("深度優(yōu)先搜索遍歷序列:"); DFS_2(G,tmp); for(int v=0; v<***.vexnum; v++)if(!visited[v])DFS_2(G,v); printf("");}void BFSTraverse_2(ALGraph G,Status (*Visit)(ALGraph G,int v))///鄰接表BFS{ for(int v=0; v<***.vexnum; v++)visited[v]=FALSE; queue<int>Q; printf("請(qǐng)輸入廣度優(yōu)先搜索起始結(jié)點(diǎn):"); string st; cin>>st; printf("廣度優(yōu)先搜索遍歷序列:"); int temp=LocateVex_2(G,st); Visit(G,temp); ***.push(temp); visited[temp]=TRUE; while(!***.empty()) { int tmp=***.front(); ***.pop(); for(int w=FirstAdjVex(G,tmp); w>=0; w=NextAdjVex(G,tmp,w)) { if(!visited[w]) { visited[w]=TRUE; Visit(G,w); ***.push(w); } } } for(int v=0; v<***.vexnum; v++)///剩余連通分量 { if(!visited[v]) { visited[v]=TRUE; Visit(G,v); ***.push(v); while(!***.empty()) { int tmp=***.front(); ***.pop(); for(int w=FirstAdjVex(G,tmp); w>=0; w=NextAdjVex(G,tmp,w)) { if(!visited[w]) { visited[w]=TRUE; Visit(G,w); ***.push(w); } } } } } printf("");}void PrintGraph(ALGraph G)///輸出鄰接表{ cout<<"圖的創(chuàng)建完成,該圖的鄰接表表示為:"<<endl; ArcNode *p; for(int i=0; i<***.vexnum; i++) { if(***.vertices[i].firstarc == NULL) cout<<i<<":"<<***.vertices[i].data<<"-->NULL"<<endl; else { p = ***.vertices[i].firstarc; cout<<i<<":"<<***.vertices[i].data<<"-->"; while(p->nextarc!=NULL) { cout<<p->adjvex<<"-->"; p = p->nextarc; } cout<<p->adjvex<<"-->NULL"<<endl; } }}Status CreateGraph_2(ALGraph &G)///鄰接表{ printf("請(qǐng)輸入建圖類型(1:無權(quán)有向圖,、2:帶權(quán)有向網(wǎng)、3:無權(quán)無向圖,、4:帶權(quán)無向網(wǎng)):"); scanf("%d",&***.kind);///輸入圖的種類 switch(***.kind-1) { case DG: return CreateDG_2(G); case DN: return CreateDN_2(G); case UDG: return CreateUDG_2(G); case UDN: return CreateUDN_2(G); default: return ERROR; }}Status visit_2(ALGraph G,int v)///鄰接表遍歷{ cout<<***.vertices[v].data<<' ';}int main(){ while(true) { MGraph G1; CreateGraph(G1);///鄰接矩陣 DFSTraverse(G1,visit);///深搜鄰接矩陣 BFSTraverse(G1,visit);///廣搜鄰接矩陣 ALGraph G2;///鄰接表 CreateGraph_2(G2); PrintGraph(G2);///輸出鄰接表 DFSTraverse_2(G2,visit_2);///鄰接表深搜 BFSTraverse_2(G2,visit_2);///鄰接表廣搜 }}報(bào)錯(cuò):想找一下這段c語言的錯(cuò)誤,,該怎么改。(詳細(xì)代碼和報(bào)錯(cuò)如下)

首先,,你的程序不是c語言的,,而是C++的(C與C++是兩種不同的語言)

其次,你的程序不完整,,除了少了visited變量的定義(它應(yīng)該是一個(gè)bool型數(shù)組),,還少了MGraph類型及CreateGraph/BFSTraverse兩個(gè)函數(shù)的定義

若是參考了別人的程序,請(qǐng)檢查程序完整性

對(duì)一個(gè)專業(yè)程序員來說,,分析修改別人的程序要比自己寫一個(gè)難很多的(要理解別人的思路,,逐條分析每個(gè)語句的具體含義),所以如果你是想學(xué)習(xí)編程,,建議完全自己動(dòng)手,,若只是交作業(yè),,網(wǎng)上找完整的解決方案或把具體要求發(fā)上來看看有空幫你寫一個(gè)。

文章評(píng)論