这是一个C++的无向图邻接矩阵,深度优先和广度优先遍历,实在不知道哪里不对,求大神解答
 #include<iostream>
 using namespace std;
const int MaxSize=10;//图中的最多顶点个数
template <class T>
classMGraph
{
    public:
        MGraph(T a[],int n,int e);//构造函数,建立具有n个顶点e条边的图
        ~MGraph(){}               //析构函数为空
        void DFSTraverse(int v);  //深度优先遍历图
        void BFSTraverse(int v);  //广度优先遍历图
        void Setvisited();       //
    private:
        T vertex[MaxSize];          //存放图中顶点的数组
        int arc[MaxSize][MaxSize];  //存放图中边的数组
        int vertexNum,arcNum;              //图的顶点数和边数
        int visited[MaxSize];       //
};

template<class T>
void MGraph<T>::Setvisited()
{
    for(int i=0;i<vertexNum;i++)    
        visited[i]=0;      

}

template<class T>
MGraph<T>::MGraph(T a[],int n,int e)
{
    int i,j,k;
    vertexNum=n;arcNum=e;
    for(i=0;i<vertexNum;i++)    
        vertex[i]=a[i];        
    for(i=0;i<vertexNum;i++)      //初始化邻阶矩阵
        for(j=0;j<vertexNum;j++)
            arc[i][j]=0;
        for(k=0;k<arcNum;k++)    //依次输入每一条边
        {
            cout<<"putin bianhao";
            cin>>i>>j;              //输入边依附的两个顶点的编号
            arc[i][j]=1;arc[j][i]=1;//置有边标志
        }
}

template<class T>
void MGraph<T>::DFSTraverse(int v)
{
    int j;
    cout<<vertex[v];visited[v]=1;
    for(j=0;j<vertexNum;j++)
        if(arc[v][j]==1&&visited[j]==0)
            DFSTraverse(j);
}

template<class T>
void MGraph<T>::BFSTraverse(int v)
{
    int j,front,rear;
    int Q[MaxSize];
    front=rear=-1;//初始化队列,假设队列采用顺序存储且不会发溢出
    cout<<vertex[v];visited[v]=1;Q[++rear]=v;//当访问顶点入队
    while(front!=rear)                      //当队列非空时
    {
        v=Q[++front];
            for(j=0;j<vertexNum;j++)         //将队头元素出队并送到v中   
                if(arc[v][j]==1&&visited[j]==0)
                {
                    cout<<vertex[j];visited[j]=1;Q[++rear]=j;
                }
    }
}

int main()
{
    int n,e;
    cout <<"putin dian:";
    cin>>n;
    cout<<"putin edge:";
    cin>>e;
    char a[MaxSize];
    cin>>a;
    MGraph<char> m(a,n,e);
    m.Setvisited();
    cout<<"DFST:";
    m.DFSTraverse(1);
    cout<<endl;
    m.Setvisited();
    cout<<"BFST:";
    m.BFSTraverse(1);
    cout<<endl;
    return 0;
}

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
基于邻接矩阵的无向图的广度优先遍历
数据结构实验之图论二:图的深度遍历Time Limit: 1000MS Memory Limit: 65536KBSubmit Statistic DiscussProblem Description请定一个无向图,顶点编号从0到n-1,用深度优先搜索(DFS),遍历并输出。遍历时,先遍历节点编号小的。Input输入第一行为整数n(0 Output输出有n行,对应n组输出,每行为用空格隔开的k个整
邻接表或者邻接矩阵为存储结构实现连通无向图的深度优先和广度优先遍历
程序设计任务: 设计一个程序,实现以邻接表或者邻接矩阵为存储结构,实现连通无向图的深度优先和广度优先遍历。基本要求:以邻接表或者邻接矩阵为存储结构,实现连通无向图的深度优先和广度优先遍历。以用户指定的结点为起点,分别输出每种遍历下的结点访问序列和相应生成树的边集。测试数据:教科书p168图7.13(a)。
广度优先遍历(无向图 C语言 邻接矩阵实现)
#include&lt;stdio.h&gt; //数组表示法(领接矩阵实现) #define MAXN 20 typedef struct{ char vertec[MAXN]; char arcs[MAXN][MAXN]; }ArrayGraph; typedef struct node{ int vertec; struct node *next; }*NODE; type...
求大神解答实在找不出毛病在哪里
#define __STDC_WANT_LIB_EXT1__ 1//说明:出入数字,输出对应英文rn#includern#includern#includern#includernint main(void)rnrn char again='Y';rn dorn rn int num;//数字rn char result[100] = "";//结果rn size_t result_len = sizeof(result);rn char connect1[10] = " hundred";//连接1rn char connect2[10] = " and ";//连接2rn char a[10][7] = rn " ","One","Two","Three","Four","Five","Six ","Seven ","Eight ","Nine "//百位rn ;rn char b[10][8] = rn " "," ","twenty ","thirty ","forty ","fifty ","sixty ","seventy ","eighty ","ninty "//十位rn ;rn char c[10][7] = rn " ","one","two","three","four","five","six ","seven ","eight ","nine "//个位rn ;rnrn while (true)//检查输入是否在0-1000rn rn printf("\nEnter a number less than 1000.\n");rn scanf("%d", &num);rn if ((num < 0) || (num>999))rn printf("You are kidding.Enter again.");rn elsern break;rn rn //形成最终结果rn int g = num / 100;rn num = num - g * 100;rnrn if (strcat_s(result, result_len, a[g]))rn rn printf("Error");rn return 1;rn rn if (a[g][0] != ' ')rn strcat_s(result, result_len, connect1);rn if ((num > 0) && (g != 0))rn strcat_s(result, result_len, connect2);rn g = num / 10;rn if (strcat_s(result, result_len, b[g]))rn rn printf("Error");rn return 2;rn rn num = num - g * 10;rn g = num;rn if (strcat_s(result, result_len, c[g]))rn rn printf("Error");rn return 3;rn rn printf("%s", result);//输出结果rn printf("\nDo you want to try again? Y or N\n");//判断是否重复操作rn scanf("%c", &again);rn while (toupper(again) =='Y');rn getch();rn return 0;rnrn
深度优先和广度优先遍历
定义 常见的图的遍历有深度优先遍历和广度优先遍历,所谓深度优先,即选择图中一个顶点作为出发访问顶点,在周围可达的顶点中选择一个未被访问过的作为下一个被访问的顶点,重复进行,如果当前被访问的顶点周围没有未被访问的顶点,则返回上一层,直到返回最初在图中选择的出发访问顶点,如果图中仍有未被访问的顶点,则说明图有错,不是连通图。广度优先是指从图中选择的出发访问顶点开始,选择当前顶点周围所有可达的未被访问
不知道哪里出错了,求大神解答!!!
定义2个二维整型数组,每个数组元素都>=8个,但个数不能相同,1个数组在定义时初始化元素,另一个数组通过键盘输入元素,分别输出2个数组中的所有元素(要求:按照矩阵格式输出)rnrn```rn#include rnint main()rn rn int a[] = 1,2,3,4,5,6,7,8, b[9];rn int n = 9;rn for (int i = 0; i < n; i++)rn rn scanf("%d", &b[i]);rn rn printf("A数组:rn");rn for (int i = 0; i < 8; i++)rn rn if (i && i % 4 == 0) printf("rn");rn printf("%d ", a[i]);rn rn printf("B数组:");rn for (int i = 0; i < n; i++)rn rn if (i && i % 3 == 0) printf("rn");rn printf("%d ", b[i]);rn rn printf("rn");rn return 0;rnrn```
广度优先遍历无向图
#include&amp;lt;stdio.h&amp;gt;#include&amp;lt;stdlib.h&amp;gt;#define MAX_VERTEX_NUM 20#define MAXQSIZE 100#define OK 1typedef char VertexType;typedef char QElemType;typedef int InfoType;typedef struct ArcNode{    i...
广度优先遍历(邻接矩阵)
Problem Description 无向连通图G的顶点值为字符型且互不相等,采用邻接矩阵存储。广度优先遍历G:从存储下标为0的顶点开始,接着按下标从小到大的顺序依次访问顶点0的所有未被访问的邻接点,分别从这些邻接点出发再按下标从小到大依次访问它们的未被访问的邻接点,直至G中所有与顶点0有路径相通的顶点都被访问到。 Input 有多组数据,每组第一行为两个整数n和e,表示n个顶点和e条边(0&amp;amp;amp;amp;amp;l...
无向图的广度优先遍历
无向图的广度优先遍历通过队列来实现,广度优先队列可以用来实现查找最短路径,也就是距离两个点之间边最少的路径,先让顶点进队列,然后出队列,把和顶点相连通的点入队列,借助队列的先入先出特性来实现广度优先遍历。寻找路径的API如下:(Graph 请看前面无向图的邻接表实现) BreadthFirstPaths(Graph G, int s) 在G中...
求图的割边(桥)(邻接矩阵 无向图)C~
求割边 (桥)
邻接矩阵无向图
内部代码:#include<stdio.h> #define MAX_VERTEX_NUM 10 /*最多顶点个数*/ #define INFINITY 32768 /*表示极大值, 即∞*/ #define Ok 1 #define AdjType int #define OtherInfo int #define Error -1
邻接矩阵--无向图
图的邻接矩阵存储方式是用俩个数组来表示的图。一个一维数组储存图中顶点信息,一个二维数组(称为邻接矩阵)存储图中的边和弧的信息。 有了矩阵的好处: 1、我们要判定任意二个顶点是否有边就容易了; 2、我们知道某个顶点的度,其实就是知道顶点vi在邻接矩阵中第i行(i列)的元素之和。 3.求顶点vi的所有邻接点就是将矩阵中第i行元素扫描一遍,为1就是邻接点。
不知哪里不对 求解答
代码如下:rnpackage yuanyang.cn;rnrnimport java.util.Random;rnrnimport javax.swing.ImageIcon;rnimport javax.swing.JFrame;rnimport javax.swing.JLabel;rnrnpublic class BoardGame extends JFrame rnrn /**rn * @param argsrn */rn public static void main(String[] args) rn // TODO Auto-generated method stubrn BoardGame frame = new BoardGame();rn frame.setVisible(true);rn rnrn rn public BoardGame()rn rn rn JLabel [] jlbArrey= new JLabel[8];rn ImageIcon imge1 = new ImageIcon("E:\\Java\\12.jpg");rn ImageIcon imae2 = new ImageIcon("E:\\Java\\13.jpg");rn for(int i=0;i<9;i++)rn rn jlbArrey[i]= new JLabel();rn this.add(jlbArrey[i]);rn Random rdn = new Random();rn int n=rdn.nextInt(3);rn if(n==0)rn rn jlbArrey[i].setIcon(imge1);rn rn else if(n==1)rn rn jlbArrey[i].setIcon(imae2);rn rn elsern rn jlbArrey[i].setIcon(null);rn rn rn rn rn rn rn rn rn rn rn rnrnrnrnrn产生错误如下:rnrnException in thread "main" java.lang.ArrayIndexOutOfBoundsException: 8rn at yuanyang.cn.BoardGame.(BoardGame.java:29)rn at yuanyang.cn.BoardGame.main(BoardGame.java:16)rn
求大神看看哪里不对
#includern#includernint main()rnrn void exchange(char*p1,char*p2,char*p3);rn char a,b,c,*p1,*p2,*p3;rn p1=&a;p2=&b;p3=&c;rn printf("原字符串:%s\n");rn scanf("%s",&a,&b,&c);rn exchange(p1,p2,p3);rn printf("排序后字符串:%s",a,b,c);rn return 0;rnrnvoid exchange(char*p1,char*p2,char*p3)rnrn char swap(char*p1,char*p2);rn if(strcmp(*p1,*p2)>0) swap(*p1,*p2);rn if(strcmp(*p1,*p3)>0) swap(*p1,*p3);rn if(strcmp(*p2,*p3)>0) swap(*p2,*p3);rnrnchar swap(char*p1,char*p2)rnrn char*t;rn *t=*p1;rn *p1=*p2;rn *p2=*t;rnrnrnrn
求大神指点。。哪里不对
// 设置查询字符串rn /*rn CString strSQL;rn strSQL.Format(_T("select * from employees where 员工编号 = '%s'order by 员工编号 desc"),strNum);rn _bstr_t bstrSQL;rn bstrSQL = (_bstr_t)strSQL;rn // 每次在m_pRecordset->Open()函数出错!!!rn */rn rnrn _bstr_t bstrSQL = _T("select * from employees where 员工编号 = 6 order by 员工编号 desc"); rn //成功了!!!rnrn //创建记录集指针对象实例rn m_pRecordset.CreateInstance(__uuidof(Recordset));rnrn //打开记录集rn m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);rnrn m_pRecordset->MoveFirst();rn[img=https://img-bbs.csdn.net/upload/201610/26/1477447858_97460.png][/img]rn
图的存储与深度优先与广度优先遍历
C++编写的图的存储与深度优先与广度优先遍历
图的深度优先和广度优先遍历
数据结构有关的图的深度优先和广度优先遍历
深度优先和广度优先遍历图算法
本源文件CPP中代码使用深度优先和广度优先遍历图的算法。
Java实现深度优先和广度优先遍历
其实这两个算法思想很好理解。 深度优先遍历: 在一个图中选择一个起始点v0,然后遍历其子节点。 再以子节点为起始点,遍历子节点的子节点。 就这样一直递归下去,重复2。 然后一直遍历到没有子节点,开始回溯。 广度优先遍历: 从图中某个顶点v0出发,并访问此顶点。 从v0出发,访问V0的各个未曾访问的邻接点W1,W2,…,Wk;然后,依次从W1,W2,…,Wk出发访问各自未被访问的邻接点。 重复...
深度优先和广度优先遍历迷宫
package didi; import java.util.Stack; /** * 迷宫问题 {{1,1,0,1}, {1,1,0,1}, {0,1,1,1}, {0,0,1,1}}; {1,1,1,0,1}, {1,0,1,0,1}, {1,0,1,1,1}, {1,1,0,1,1}, {0,0,0,1,1}, * @author yanjie * */ public clas
深度优先和广度优先遍历算法
在编程生活中,我们总会遇见属性结构,这几天刚好需要对树形结构操作,就记录下自己的操作方式以及过程。现在假设有一颗这样树,(是不是二叉树都没关系,原理都是一样的)1、深度优先 英文缩写为DFS即Depth First Search.其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次。对于上面的例子来说深度优先遍历的结果就是:A,B,D,E,I,C,F,G,H.(假设
连通图里的深度优先和广度优先遍历
从图中的某个顶点出发,按照某种搜索方法沿着图的边访问图中的所有顶点,使得每个顶点仅被访问一次,这个过程称为图的遍历。图的遍历有两种:深度优先遍历和广度优先遍历。   图分为连通图和非连通图,这里主要讨论连通图的深度、广度优先遍历。   一、深度优先遍历   图的深度优先遍历类似于树的先序遍历,它的基本思想是:首先访问指定的起始顶点vv, 然后选取与vv邻接的未被访问的任意一个顶点ww, 访问之
图的遍历(深度优先和广度优先遍历算法)
图作为较为复杂的数据结构,对图的操作首先应该了解图的深度优先和广度优先搜索遍历算法!
图的深度优先和广度优先遍历源码
图的深度优先和广度优先遍历,下载下来可直接运行。你值得拥有
图深度优先和广度优先遍历
实验目的    1. 深入了解图的逻辑结构特性及其基本操作    2. 了解图的各种存储结构的特点与适用范围,熟练掌握在邻接矩阵和邻接表存储结构上深度优先和广度优先搜索算法的实现    3. 掌握图的应用,如求解图的连通性问题,最小生成树,拓扑排序,关键路径和最短路径算法及其灵活应用实验预习    1. 深入了解图的邻接矩阵表示法与图的邻接矩阵表示法    2. 在实验预习报告上设计,编写实验内容...
图的遍历,包括深度优先和广度优先遍历
图的遍历,非常经典啊,包括深度优先和广度优先遍历以及先序、中序、和后序等等,只有你想不到,没有我做不到的,希望对你有所帮助。
二叉树的深度优先和广度优先遍历
深度优先等效于先序遍历,根左右的顺序,常常采用递归或者堆栈(后进先出)实现,所以我们先把右子树放入栈中,后放左子树,这样所有的左子树访问完了
数据结构-二叉树的深度优先和广度优先遍历
1.基本概念DFS深度优先遍历:沿着树的深度遍历树的节点,先访问根结点,然后是左子树,右子树 BFS广度优先遍历:横向遍历,沿着树的宽度,先访问根结点,然后左右子节点。然后是上述左右子节点的子节点,一层一层往下。 以下图为例: DFS的结果为【ABDECFG】 BFS的结果为【ABCDEFG】2.递归实现void DFS(TreeNode* root, vector<int>& ans)
二叉树深度优先和广度优先遍历
树的遍历是树的一种重要的运算。所谓遍历是指对树中所有结点的信息的访问,即依次对树中每个结点访问一次且仅访问一次,我们把这种对所有节点的访问称为遍历(traversal)。那么树的两种重要的遍历模式是深度优先遍历和广度优先遍历,深度优先一般用递归,广度优先一般用队列。一般情况下能用递归实现的算法大部分也能用堆栈来实现。
C#的一个模拟登陆的代码 实在不知道哪里错了 求大神解答
250 public bool GetHtmlContent(string url, string method, string cookie)rn251 rn252 tryrn253 rn254 string urlPrefix, tmpUrl;rn255 tmpUrl = url;rn256 urlPrefix = tmpUrl.Substring(0, tmpUrl.IndexOf("//")); //get 'http' or 'https'rn257 tmpUrl = tmpUrl.Substring(tmpUrl.IndexOf("//") + 2);rnrn258 rn259 if (tmpUrl.IndexOf("/") != -1)rn260 rn261 urlPrefix = urlPrefix + "//" + tmpUrl.Substring(0, tmpUrl.IndexOf("/"));rn262 rn263 elsern264 rn265 urlPrefix = urlPrefix + "//" + tmpUrl;rn266 rn提示错误是rn2013-01-11 14:37:40 Exception: 长度不能小于 0。rn参数名: lengthrn 在 System.String.InternalSubStringWithChecks(Int32 startIndex, Int32 length, Boolean fAlwaysCopy)rn 在 SkyDriveManager.baseHttpAbstract.GetHtmlContent(String url, String method, String cookie) 位置 D:\SDmanager\ShareMeManager\baseHttpAbstract.cs:行号 256rn求大神啊 毕业设计啊这是
图的深度优先邻接矩阵
关于图的深度优先遍历邻接矩阵的方法,欢迎使用
无向图非递归的深度优先非递归遍历
#include &amp;amp;lt;iostream&amp;amp;gt; #define Max 100 #include &amp;amp;lt;string&amp;amp;gt; bool visited[Max]; typedef int ElemType; using namespace std; typedef struct ArcNode { int adjvex; struct ArcNode *nextarc;...
无向图的深度优先生成森
对于无向图,从任意一个顶点出发,根据深度优先遍历,可以得到一个连通分量。对于非连通图,每一次从一个未访问的顶点出发,可以得到多个连通分量。将这些通过深度优先遍历求得连通分量构成一棵棵生成树,并以兄弟孩子链表,将这些生成树以森林的形式存储。 将这个森林(二叉树)进行先序遍历,得到的结果和深度优先遍历的结果一致!
广度优先遍历邻接矩阵版
广度优先遍历邻接矩阵版 package 广度优先遍历邻接矩阵版; import java.util.LinkedList; import java.util.Queue; public class BFSTest { //存储节点信息 private char[] vertices; //存储边信息 private int[][] arcs; //图中结点数 priva...
图 邻接矩阵 深度优先遍历 广度优先遍历
Eclipse java工程: 图的深度优先遍历、广度优先遍历 demo:http://download.csdn.net/detail/keen_zuxwang/9875848 import java.util.ArrayList; import java.util.LinkedList; /** * @description 邻接矩阵模型类 */ public class Grap
实在不知道错在哪里?
程序的主要目的就是将一个文件夹移动, 采用递归算法,毛病就是要移动的文件夹内部的文件和文件夹可以删除,但这个根文件夹却不能删除,我知道,删除之前应调用rnFindClose(hFind)//HANDLE hFind = FindFirstFile("..")rn哎!就是不知道错在哪里?请高手赐教!!rnvoid CMyTreeView::MoveDirectory(CString strSource, CString strDest)rn rn int pos = strSource.ReverseFind('\\');rn CString strTemp, strSourceTemp;rn strTemp = strDest + "\\" + strSource.Mid(pos + 1);rn CreateDirectory(strTemp.LockBuffer(), NULL);rn WIN32_FIND_DATA wfd;rn strSourceTemp = strSource + "\\*.*";rn HANDLE hFind = FindFirstFile(strSourceTemp.LockBuffer(), &wfd);rn if(hFind == INVALID_HANDLE_VALUE)rn rn ::FindClose(hFind);rn return;rn rn CString strTempSource;rn CString strTempDest;rn while(FindNextFile(hFind, &wfd))rn rn if( strcmp(wfd.cFileName, ".") != 0 && rn strcmp(wfd.cFileName, "..") != 0)rn rn if(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)rn rn MoveDirectory(strSource + "\\" rn + wfd.cFileName, strTemp);rn rn else if(strcmp(wfd.cFileName, "..") != 0)rn rn strTempSource = strSource + "\\" +wfd.cFileName;rn strTempDest = strTemp + "\\" + wfd.cFileName;rn HANDLE hFile = CreateFile(strTempDest.LockBuffer(), rn GENERIC_READ|GENERIC_WRITE,rn FILE_SHARE_READ|rn FILE_SHARE_WRITE,rn NULL, CREATE_NEW,rn FILE_ATTRIBUTE_NORMAL,NULL);rn if(hFile == INVALID_HANDLE_VALUE)rn rn MessageBox(NULL, "Error Create File",rn MB_ICONERROR);rn break;rn rn if(!CopyFile(strTempSource.LockBuffer(),rn strTempDest.LockBuffer(), FALSE))rn MessageBox(NULL, strTempDest.LockBuffer(),rn MB_ICONERROR);rn if(!DeleteFile(strTempSource.LockBuffer()))rn MessageBox(NULL,rn strTempSource.LockBuffer(),rn MB_ICONERROR);rn rn rn rn::FindClose(hFind);rn if(!RemoveDirectory(strSource.LockBuffer()))rn rn DWORD dw = GetLastError(); //dw == 32rn MessageBox(NULL, strSource, MB_OK);rn rn rnrnrn我的信箱:zhj0421@sohu.com
图的广度优先遍历(邻接矩阵)
广度优先遍历是连通图的一种遍历策略。其基本思想如下:1、从图中某个顶点V0出发,并访问此顶点;2、从V0出发,访问V0的各个未曾访问的邻接点W1,W2,…,Wk;然后,依次从W1,W2,…,Wk出发访问各自未被访问的邻接点;3、重复步骤2,直到全部顶点都被访问为止。例如下图中: 1.从A开始,首先找到A的关联顶点D,E2.由D出发,找到B,C;由E出发,找到A,但是A已经遍历过,所以忽略。3.由B
图(邻接矩阵)的深度、广度优先遍历
/******************************************************************************* * * * 图(邻接矩阵存储)的深度优先和广度优先 * * * **********************************
C++邻接矩阵的深度、广度优先遍历
邻接矩阵的深度、广度优先遍历,以及插入一个结点
无向图的广度优先遍历和深度优先遍历
public class MGraph { private char[] vexs;// 顶点 private int[][] edge;// 存储边的二维数组 private int arcNum;// 边的数目 private boolean[] visited;// 访问标志数组 // 确定顶点在图中的位置 public int locataVex(char ve...
相关热词 c# stream 复制 android c# c#监测窗口句柄 c# md5 引用 c# 判断tabtip 自己写个浏览器程序c# c# 字符串变成整数数组 c#语言编程写出一个方法 c# 转盘抽奖 c#选中treeview