scau:数据结构oj 实验七

//8647 实现图的存储结构
#include <iostream>
#include <stack>
#include <algorithm>
#include <string.h>//记得加.h
#include <cstdio>
#include <cstdlib>

using namespace std;

int main()
{
    int n,m;
    cin>>n>>m;
    int a[n+1][n+1];
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        a[i][j]=0;
    }
    while(m--)
    {
        int i,j;
        cin>>i>>j;
        a[i][j]=1;
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        cout<<a[i][j]<<" ";
        cout<<endl;
    }
    return 0;
}
//8648 图的深度遍历
#include <iostream>
#include <stack>
#include <algorithm>
#include <string.h>//记得加.h
#include <cstdio>
#include <cstdlib>

using namespace std;

struct element
{
    char name[5];
};//记得要加分号

void dfs(int x,int v[],element a[],stack<int> e[])
{
    if(v[x]==1)
    return;
    cout<<a[x].name<<" ";
    v[x]=1;
    int length=e[x].size();
    for(int i=0;i<length;i++)
    {
        int t=e[x].top();
        e[x].pop();
        if(v[t]==0)
        dfs(t,v,a,e);
    }
}

int main()
{
    int n,m;
    int type;cin>>type;
    cin>>n>>m;
    int v[n+1];
    v[n+1]={0};//这里要分开写
    stack<int>e[n+1];
    element a[n+1];
    for(int i=1;i<=n;i++)
    cin>>a[i].name;
    char x[5],y[5];
    int w;
    for(int i=1;i<=m;i++)
    {
        if(type==1||type==3)
        cin>>x>>y>>w;
        else
        cin>>x>>y;
        int p=-1,q=-1;
        for(int j=1;j<=n;j++)//初始值必须从1开始,因为前面输入的时候是从1开始
        {
            if(strcmp(a[j].name,x)==0)
            p=j;
            else if(strcmp(a[j].name,y)==0)
            q=j;
            if(q!=-1&&p!=-1)
            break;
        }
        if(type==0||type==1)
        e[p].push(q);
        else
        {
            e[p].push(q);
            e[q].push(p);
        }
    }
    for(int i=1;i<=n;i++)
    dfs(i,v,a,e);
    return 0;


}
//8649 图的广度遍历

#include <iostream>
#include <stack>
#include <queue>
#include <algorithm>
#include <string.h>//记得加.h
#include <cstdio>
#include <cstdlib>

using namespace std;

struct element
{
    char name[5];
};



void bfs(int x,int v[],element a[],stack<int> e[])
{
    if(v[x]==1)
    return;
    queue<int>q;
    v[x]=1;
    q.push(x);
    while(!q.empty())
    {
        int t=q.front();
        cout<<a[t].name<<" ";
        q.pop();
        int length=e[t].size();
    for(int i=0;i<length;i++)
    {
        int y=e[t].top();
        e[t].pop();
        if(v[y]==0)
        {
            v[y]=1;
            q.push(y);
        }
    }
    }
}

int main()
{
    int n,m;
    int type;cin>>type;
    cin>>n>>m;
    int v[n+1];
    v[n+1]={0};//这里要分开写
    stack<int>e[n+1];
    element a[n+1];
    for(int i=1;i<=n;i++)
    cin>>a[i].name;
    char x[5],y[5];
    int w;
    for(int i=1;i<=m;i++)
    {
        if(type==1||type==3)
        cin>>x>>y>>w;
        else
        cin>>x>>y;
        int p=-1,q=-1;
        for(int j=1;j<=n;j++)//初始值必须从1开始,因为前面输入的时候是从1开始
        {
            if(strcmp(a[j].name,x)==0)
            p=j;
            else if(strcmp(a[j].name,y)==0)
            q=j;
            if(q!=-1&&p!=-1)
            break;
        }
        if(type==0||type==1)
        e[p].push(q);
        else
        {
            e[p].push(q);
            e[q].push(p);
        }
    }
    for(int i=1;i<=n;i++)
    bfs(i,v,a,e);
    return 0;


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zero_019

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值