一段代码提示函数找不到标识符
#include "stdafx.h"#include<iostream>using namespace std;const int MAX_VALUE=100; //设置最大路径长度const int MAX_VERTEX_NUM=20; //最大顶点个数#define ture 1#define false 0typedef struct{ char *name;}VertexType; //顶点信息类型typedef struct{ int adj; //char *info;}ArcCell;//AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];typedef struct{ VertexType vexs[MAX_VERTEX_NUM]; //顶点向量 ArcCell arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM];//邻接矩阵 int vexnum,arcnum; //图的顶点数和弧数 // int kind; //图的种类标志}Graph;void swap(int &A,int &B){ int tmp=A; A=B; B=tmp;}int factorial(int n) //计算全排列{ int res=1; res*=n--; return res;}void dfs_gen_loop(Graph &G,int *goal) //得到路径{ int total=0,sum=0; //total为最终结果,sum为每次结果 int everytry[MAX_VERTEX_NUM]; for(int i=0;i<G.vexnum;++i) { everytry[i]=goal[i];//第一次传入的也是一种走法 } [color=#FFFF00]total=CountLength(G.vexnum,everytry[MAX_VERTEX_NUM],G.arcs);[/color] for(int i=1,p=0;i<factorial(G.vexnum);++i) { if(p==G.vexnum-1) p=0; swap(everytry[p],everytry[p+1]); [color=#FFCC00]sum=CountLength(G.vexnum,everytry[MAX_VERTEX_NUM],G.arcs);[/color] if(sum<total) { total=sum; for(int k=0;k<G.vexnum;++k) goal[k]=everytry[k]; } sum=0; ++p; }}int CountLength(int n,int A[MAX_VERTEX_NUM],ArcCell Vexs[MAX_VERTEX_NUM][MAX_VERTEX_NUM]) //计算路径长度{ int d=0; for(int i=0;i<n;++i) d+=Vexs[A[i]][A[(i+1)%n]].adj; return d;}int LocateVex_M(Graph G,VertexType u) //查找顶点位置不存在返回-1{ for(int i=0;i<G.vexnum;++i) if(strcmp(u.name,G.vexs[i].name)==0) return i; return -1;}void Add_Edge(Graph &G,VertexType v,VertexType w,int q) //添加边信息{ int i=-1,v1=LocateVex_M(G,v),w1=LocateVex_M(G,w);//判断是否含有相关信>息标志 if(LocateVex_M(G,v)<0 || LocateVex_M(G,w)<0) return; cout<<"请输入此弧或边的权值:"; cin>>G.arcs[v1][w1].adj;// do{// cout<<"是否有该弧(边)的相关信息(是:1 否:0):";// cin>>i;// }while(i!=1 && i!=0);// if(i)// {cout<<"请输入该弧(边)的信息(小于"<<MAX_INFO<<"个字符):";// G.arcs[v1][w1].info=new char*[MAX_INFO];// cin>>G.arcs[v1][w1].info;// } G.arcs[w1][v1]=G.arcs[v1][w1]; ++G.arcnum; //弧数+1}bool InitGraph(Graph &G){ cout<<"请输入要建立的图的顶点个数:"; cin>>G.vexnum; for(int i=0;i<G.vexnum;++i) { cout<<"请输入顶点名字:"; cin>>G.vexs[i].name; }// cout<<"请输入图的种类标志:";// cin>>G.kind; G.arcnum=0; //G.arcs=NULL; //G.arcs=new ArcCell[G.vexnum][G.vexnum]; if(G.vexnum<MAX_VERTEX_NUM) { for(int i=0;i<G.vexnum;++i) for(int j=0;j<G.vexnum;++j){ G.arcs[i][j].adj=MAX_VALUE; //G.arcs[i][j].info=NULL; } return ture; } return false;}int main(){ Graph G; InitGraph(G); int goal[MAX_VERTEX_NUM]; for(int i=0;i<G.vexnum;++i) goal[i]=i; Add_Edge(G,G.vexs[0],G.vexs[1],2); //a-2->b Add_Edge(G,G.vexs[0],G.vexs[2],5); //a-5->c Add_Edge(G,G.vexs[0],G.vexs[3],7); //a-7->d Add_Edge(G,G.vexs[1],G.vexs[2],8); //b-8->c Add_Edge(G,G.vexs[1],G.vexs[3],3); //b-3->d Add_Edge(G,G.vexs[2],G.vexs[3],1); //c-1->d dfs_gen_loop(G,goal); cout<<"\n最短路径为:"; for(int i=0;i<G.vexnum;++i) cout<<G.vexs[goal[i]].name<<"->"; cout<<G.vexs[goal[0]].name<<endl; return 0;}
#include<iostream>using namespace std;const int MAX_VALUE=100; //设置最大路径长度const int MAX_VERTEX_NUM=20; //最大顶点个数#define ture 1#define false 0typedef struct{ char *name;}VertexType; //顶点信息类型typedef struct{ int adj; //char *info;}ArcCell;//AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];typedef struct{ VertexType vexs[MAX_VERTEX_NUM]; //顶点向量 ArcCell arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; //邻接矩阵 int vexnum,arcnum; //图的顶点数和弧数 // int kind; //图的种类标志}Graph;// 要声明一下这个函数int CountLength(int n,int A[MAX_VERTEX_NUM],ArcCell Vexs[MAX_VERTEX_NUM][MAX_VERTEX_NUM]);void swap(int &A,int &B){ int tmp=A; A=B; B=tmp;}int factorial(int n) //计算全排列{ int res=1; res*=n--; return res;}void dfs_gen_loop(Graph &G,int *goal) //得到路径{ int total=0,sum=0; //total为最终结果,sum为每次结果 int everytry[MAX_VERTEX_NUM]; for(int i=0;i<G.vexnum;++i) { everytry[i]=goal[i];//第一次传入的也是一种走法 } total=CountLength(G.vexnum, everytry, G.arcs); //everytry[MAX_VERTEX_NUM]数组只要传首地址就行了吧 for(int i=1,p=0;i<factorial(G.vexnum);++i) { if(p==G.vexnum-1) p=0; swap(everytry[p],everytry[p+1]); sum=CountLength(G.vexnum, everytry, G.arcs); ////everytry[MAX_VERTEX_NUM]数组只要传首地址就行了吧 if(sum<total) { total=sum; for(int k=0;k<G.vexnum;++k) goal[k]=everytry[k]; } sum=0; ++p; } }int CountLength(int n, int A[MAX_VERTEX_NUM], ArcCell Vexs[MAX_VERTEX_NUM][MAX_VERTEX_NUM]) //计算路径长度{ int d=0; for(int i=0;i<n;++i) d+=Vexs[A[i]][A[(i+1)%n]].adj; return d;}int LocateVex_M(Graph G,VertexType u) //查找顶点位置不存在返回-1{ for(int i=0;i<G.vexnum;++i) if(strcmp(u.name,G.vexs[i].name)==0) return i; return -1;}void Add_Edge(Graph &G,VertexType v,VertexType w,int q) //添加边信息{ int i=-1,v1=LocateVex_M(G,v),w1=LocateVex_M(G,w);//判断是否含有相关信>息标志 if(LocateVex_M(G,v)<0 || LocateVex_M(G,w)<0) return; cout<<"请输入此弧或边的权值:"; cin>>G.arcs[v1][w1].adj; // do{ // cout<<"是否有该弧(边)的相关信息(是:1 否:0):"; // cin>>i; // }while(i!=1 && i!=0); // if(i) // {cout<<"请输入该弧(边)的信息(小于"<<MAX_INFO<<"个字符):"; // G.arcs[v1][w1].info=new char*[MAX_INFO]; // cin>>G.arcs[v1][w1].info; // } G.arcs[w1][v1]=G.arcs[v1][w1]; ++G.arcnum; //弧数+1}bool InitGraph(Graph &G){ cout<<"请输入要建立的图的顶点个数:"; cin>>G.vexnum; for(int i=0;i<G.vexnum;++i) { cout<<"请输入顶点名字:"; cin>>G.vexs[i].name; } // cout<<"请输入图的种类标志:"; // cin>>G.kind; G.arcnum=0; //G.arcs=NULL; //G.arcs=new ArcCell[G.vexnum][G.vexnum]; if(G.vexnum<MAX_VERTEX_NUM) { for(int i=0;i<G.vexnum;++i) for(int j=0;j<G.vexnum;++j){ G.arcs[i][j].adj=MAX_VALUE; //G.arcs[i][j].info=NULL; } return ture; } return false;}int main(){ Graph G; InitGraph(G); int goal[MAX_VERTEX_NUM]; for(int i=0;i<G.vexnum;++i) goal[i]=i; Add_Edge(G,G.vexs[0],G.vexs[1],2); //a-2->b Add_Edge(G,G.vexs[0],G.vexs[2],5); //a-5->c Add_Edge(G,G.vexs[0],G.vexs[3],7); //a-7->d Add_Edge(G,G.vexs[1],G.vexs[2],8); //b-8->c Add_Edge(G,G.vexs[1],G.vexs[3],3); //b-3->d Add_Edge(G,G.vexs[2],G.vexs[3],1); //c-1->d dfs_gen_loop(G,goal); cout<<"\n最短路径为:"; for(int i=0;i<G.vexnum;++i) cout<<G.vexs[goal[i]].name<<"->"; cout<<G.vexs[goal[0]].name<<endl; return 0;}
[解决办法]
int CountLength(int n,int A[MAX_VERTEX_NUM],ArcCell Vexs[MAX_VERTEX_NUM][MAX_VERTEX_NUM]);void dfs_gen_loop(Graph &G,int *goal) //得到路径{ int total=0,sum=0; //total为最终结果,sum为每次结果 int everytry[MAX_VERTEX_NUM]; for(int i=0;i<G.vexnum;++i) { everytry[i]=goal[i];//第一次传入的也是一种走法 } total=CountLength(G.vexnum,everytry,G.arcs); for(int i=1,p=0;i<factorial(G.vexnum);++i) { if(p==G.vexnum-1) p=0; swap(everytry[p],everytry[p+1]); sum=CountLength(G.vexnum,everytry,G.arcs); if(sum<total) { total=sum; for(int k=0;k<G.vexnum;++k) goal[k]=everytry[k]; } sum=0; ++p; }}
[解决办法]
参数传入错误、
[解决办法]
我这边是运行能过了的,你加下#include "stdafx.h"这个头文件试试,我是在VC6.0下所以去掉了,你加一下试试。。