簡(jiǎn)單圖論題目

運(yùn)用 反向建圖 dfs 查找路徑,回溯路徑

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
using namespace std;
#define MAX 1<<17
bool vis[MAX];
struct Node{
int v,u,id;
};
Node node[MAX];
int head[MAX];
int cnt=0;
int k;
int top=0;
void init()
{
    memset(vis,0,sizeof(vis));
    memset(head,-1,sizeof(head));
    cnt=0;
    top=0;
}
void add_e(int u,int v,int id)
{
    node[cnt].v=v;
    node[cnt].u=head[u];
    node[cnt].id=id;
    head[u]=cnt++;
}
int str[MAX];
void dfs(int u)
{
    for(int i=head[u];i!=-1;i=node[i].u)
    {
        if(!vis[node[i].id])
        {
            vis[node[i].id]=1;
            int temp=node[i].id&1;
            dfs(node[i].v);
            str[top++]=node[i].id;
        }
    }
}
int main()
{
    while(~scanf("%d",&k))
    {
        init();
        int ans=1<<k;
        printf("%d ",ans);
        int len=1<<(k-1);
        for(int i=0;i<len;i++)
        {
            int id=i<<1|1,v=id%len;
            add_e(i,v,id);
            id=i<<1,v=id%len;
            add_e(i,v,id);
        }
        dfs(0);
        for(int i=top-1;i>=0;i--)
        {
            printf("%d",str[i]/len);
        }
         printf("\n");
    }
    return 0;
}

DFS遍歷 每一條邊

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long LL;
using namespace std;
#define maxn 200005
struct Node{
int next;
int v;
int id;
};
Node node[maxn];
int head[maxn];
bool vis[maxn];
int cnt=0;
void init()
{
    memset(head,-1,sizeof(head));
    memset(vis,0,sizeof(vis));
    cnt=0;
}
void add_e(int u,int v)
{
    node[cnt].v=v;
    node[cnt].id=cnt;
    node[cnt].next=head[u];
    head[u]=cnt++;
}
int flag=0;
void dfs(int u)
{
    for(int i=head[u];i!=-1;i=node[i].next)
    {
        if(vis[i]==0)//這一條邊 沒(méi)被訪問(wèn)過(guò)
        {
            vis[i]=1;
            dfs(node[i].v);
            flag=1;
        }
    }
}
int main() {
    int n, m, p;
    while(~scanf("%d%d", &n, &m))
        {
            int a,b;
            init();
            for(int i=0;i<m;i++)
            {
                scanf("%d%d", &a, &b);
                add_e(a,b);
            }
            int ans=0;
        for(int i=1;i<=n;i++)
        {
            flag=0;
            dfs(i);
            if(flag)
            {
                ans++;
            }
        }
        cout<<ans<<endl;
    }
    return 0;
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 一些概念 數(shù)據(jù)結(jié)構(gòu)就是研究數(shù)據(jù)的邏輯結(jié)構(gòu)和物理結(jié)構(gòu)以及它們之間相互關(guān)系,并對(duì)這種結(jié)構(gòu)定義相應(yīng)的運(yùn)算,而且確保經(jīng)過(guò)這...
    Winterfell_Z閱讀 5,900評(píng)論 0 13
  • 算法思想貪心思想雙指針排序快速選擇堆排序桶排序荷蘭國(guó)旗問(wèn)題二分查找搜索BFSDFSBacktracking分治動(dòng)態(tài)...
    第六象限閱讀 3,237評(píng)論 0 0
  • 第18天 9月/7日/2017年 1y【使用精油】 滴輕盈精油8滴于溫水中口服,排毒瘦身。 2y【學(xué)習(xí)精油】學(xué)習(xí)山...
    慢慢花開(kāi)閱讀 236評(píng)論 0 0
  • 辣椒死后,如下。 當(dāng)你決定切那顆辣椒時(shí),你就應(yīng)該知道也許它會(huì)有所反抗。 它是否會(huì)扭動(dòng)細(xì)長(zhǎng)的軀體,制造驚恐的異象,迫...
    茶湯鯊魚閱讀 352評(píng)論 0 1
  • 今年五月的廣州寵物美容行業(yè)可謂熱鬧非凡,5月20-21日,正值華南寵物展期間,來(lái)自臺(tái)灣的寵物美容大師梁憶萍老師在廣...
    荒年892閱讀 136評(píng)論 0 0