想找一下這段c語言的錯(cuò)誤,,該怎么改,。(詳細(xì)代碼和報(bào)錯(cuò)如下)
代碼:#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語言的,,而是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è)。
Tags:這段報(bào)錯(cuò)想找
相關(guān)推薦
- 求一部男主重生,,女主叫甘悅的小說。
- 攔截廣告:現(xiàn)在電腦里,,時(shí)常莫名彈出一些廣告,比如游戲,、網(wǎng)站這些,?怎么進(jìn)行有效攔截
- 腋毛拔了會(huì)越長(zhǎng)越多嗎
- 哪個(gè)臺(tái)直播2020全國乒乓球錦標(biāo)賽
- 草廬為家,明月入籬笆.清泉煮茶,,閑話桑麻.溪邊摘蘆花,,柳下喜春芽是誰寫的
- 我們班同學(xué),,在說我和她的死狗,我為了不讓同學(xué)知道我喜歡她,,就編了荒,,說我喜歡她姐姐,沒想到破她知道了
- 二樓到頂樓是一根管子,,一樓會(huì)有一個(gè)分管,,二樓和一樓是算分開的,,這樣的二樓是獨(dú)立排水嗎
- 模末世鼠疫2我一點(diǎn)獵人就閃退是什么情況
- 你覺得王思聰?shù)难孕形骰瘑?/a>
- DiskGenius在32位操作系統(tǒng)上能用嗎