17A_4图的遍历

题目描述:

给定无向连通图G

AC代码:

#include <stdio.h>
#define maxn 22


int ansG[maxn][maxn]={0};
int tempG[maxn][maxn]={0};
int visited[maxn];
int n;
int i,j;

void copy()
{
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            tempG[i][j]=ansG[i][j];
        }
    }
}

void del(int v)
{
    for(int i=1;i<=n;i++)
    {
        tempG[i][v]=0;
        tempG[v][i]=0;
    }
}//删除该结点和有关的边

void DFS(int i)
{//从第i个结点开始遍历
   // printf("%d ",i);
    visited[i]=1;
    for(int j=1;j<=n;j++)
    {
        if(visited[j]==0&&tempG[i][j]==1)
        {
            DFS(j);
        }
    }

}

int DFSTraverse(int v)
{
    int flag=0;
    for(int i=1;i<=n;i++)visited[i]=0;//记得初始化
    visited[v]=1;//不从该顶点开始遍历,该语句十分关键,且在初始化之后置1
    for(int i=1;i<=n;i++)
    {
        if(visited[i]==0)
        {
            if(++flag>1)
                return 1;
            DFS(i);
        }
    }
    return 0;

}

int main()
{
    freopen("input.txt","r",stdin);//读入文件
    scanf("%d",&n);//
    while(scanf("%d %d",&i,&j)!=EOF)
    {
        ansG[i][j]=1;
        ansG[j][i]=1;
    }//得到图
    for(int i=1;i<=n;i++)
    {
        copy();
        del(i);
        if(DFSTraverse(i))
        {
            printf("%d",i);
            return 1;
        }
    }
    printf("不存在满足要求的顶点");
}

发布了89 篇原创文章 · 获赞 1 · 访问量 1698
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 精致技术 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览