数据结构期末机考中

3.图:

   (1)图存储结构与遍历:

  图综合练习--构建邻接表 

#include<bits/stdc++.h>
using namespace std;

class arcnode
{
public:
    int i;
    arcnode *next;
};

class vnode
{
public:
    char data;
    int flag;
    arcnode *first;
};

class mygra
{
public:
    vnode *ver;
    int vexnum;
    int arcnum;
    int ffind(char ch)
    {
        int i;
        for(i=0; i<vexnum; i++)
        {
            if(ch==ver[i].data)
                return i;
        }
    }
    void iinsert(int n1,int n2)
    {
        arcnode *p=new arcnode;
        p->i=n2;
        p->next=NULL;
        arcnode *q = ver[n1].first;
        while (q->next!=NULL)
            q=  q->next;
        q->next=p;
    }
    mygra(int n,int m,char ddata[])
    {
        vexnum=n;
        arcnum=m;
        ver=new vnode[vexnum];
        int i;
        for(i=0; i<vexnum; i++)
        {
            ver[i].data=ddata[i];
            ver[i].flag=0;
            ver[i].first=new arcnode;
            ver[i].first->next=NULL;
        }
        /*while(arcnum--)
        {
        	char a;
        	char b;
        	int ii;
        	int jj;
        	cin >> a >> b;
        	for(ii=0;ii<vexnum;ii++)
        	  if(ver[ii].data==a)
        	   break;
        	for(jj=0;jj<vexnum;jj++)
        	  if(ver[jj].data==b)
        	   break;
        	if(ver[ii].flag==0)
        	 ver[ii].first=new arcnode(jj);
        	if(ver[ii].flag!=0)
        	 ver[ii].first->next=new arcnode(jj);
        }*/
        while(arcnum--)
        {
            char a;
            char b;
            cin >>a >>b;
            iinsert(ffind(a),ffind(b));
        }
        /*	int ffind(char ch)
        	{
        		int i;
        		for(i=0;i<vexnum;i++)
        		{
        			if(ch==ver[i].data)
        			 return i;
        		}
        	}*/
    }
    void display()
    {
        int i;
        for (i=0; i<vexnum; i++)
        {
            cout << i << " " << ver[i].data;
            arcnode *ps = new arcnode;
            ps = ver[i].first->next;
            while (ps!= NULL)
            {
                cout << "-" << ps->i;
                ps= ps->next;
            }
            cout << "-^" << endl;
        }
    }
};

int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int vex;
        int arc;
        cin >> vex >> arc;
        char asou[vex];
        int i;
        for(i=0; i<vex; i++)
            cin>>asou[i];
        mygra p(vex,arc,asou);
        p.display();
    }
}

  DS图—图的邻接矩阵存储及度计算

#include<iostream>
using namespace std;

#define N 500
class mygraph
{
private:
    int vex;
    int arc;
    int mar[N][N];
    int in[N]= {0};
    int out[N]= {0};
    string ve[N];
    char kind;
public:
    int find(string ex)
    {
        int i;
        for(i=0; i<vex; i++)
        {
            if(ex==ve[i])
                return i;
        }
    }
    mygraph(char k,int v,string data[],int a)
    {
        kind=k;
        vex=v;
        arc=a;
        int i;
        int j;
        for (i = 0; i <vex; i++)
            ve[i]=data[i];
        for (i = 0; i < vex; i++)
        {
            for (j = 0; j < vex ; j++)
                mar[i][j]=0;
        }
        while(arc--)
        {
            if(kind=='D')
            {
                string t, h;
                cin >> t >> h;
                mar[find(t)][find(h)] = 1;
                out[find(t)]++;
                in[find(h)]++;
            }
            if (kind == 'U')
            {
                string t, h;
                cin >> t >> h;
                mar[find(t)][find(h)] = 1;
                mar[find(h)][find(t)] = 1;
                in[find(h)]++;
                out[find(t)]=out[find(t)]+1;
            }
        }
    }
    void display()
    {
        int i;
        int j;
        for (i = 0; i < vex; i++)
        {
            for (j = 0; j < vex - 1; j++)
                cout << mar[i][j] << ' ';
            cout << mar[i][vex - 1] << endl;
        }
        for ( i = 0; i < vex; i++)
            if (out[i] + in[i] && kind == 'D')
                cout << ve[i] << ": " << out[i] << ' ' << in[i] << ' ' << out[i] + in[i]<< endl;
            else if (out[i] + in[i] && kind == 'U')
                cout << ve[i] << ": " << out[i] + in[i]<< endl;
        for ( i = 0; i < vex; i++)
            if (out[i] + in[i] == 0)
                cout << ve[i] << endl;
    }
};
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        char k;
        int v;
        cin >> k >> v;
        string p[v];
        int i;
        for(i=0; i<v; i++)
            cin >> p[i];
        int as;
        cin >>as;
        mygraph pp(k,v,p,as);
        pp.display();
    }
}

DS图遍历--深度优先搜索

#include<bits/stdc++.h>
using namespace std;

class mygraph
{
private:
    int vex;
    int **mar;
    int *temp;
public:
    mygraph(int v)
    {
        vex=v;
        mar = new int* [vex];
        temp = new int[vex];
        int i;
        int j;
        for (i = 0; i < vex; i++)
            mar[i] = new int[vex];
        for (i = 0; i < vex; i++)
            for (j = 0; j < vex; j++)
                cin >>mar[i][j];
        for ( i = 0; i < vex; i++)
            temp[i] = 0;
    }
    void dfs(int pp)
    {
        temp[pp] = 1;
        cout << pp << " ";
        int i;
        for (i = 0; i < vex; i++)
            if (!temp[i]&& mar[pp][i])
                dfs(i);
    }
    void dfs()
    {
        int i;
        for (i=0; i <vex; i++)
        {
            if (temp[i] == 0)
                dfs(i);
        }
    }
};

int main()
{
    int t;
    cin >> t;
    while (t--)
    {
        int ve;
        cin >>ve;
        mygraph ou(ve);
        ou.dfs(0);
        ou.dfs();
        cout << endl;
    }
}

DS图遍历--广度优先搜索

#include<bits/stdc++.h>
using namespace std;

class mygraph
{
private:
    int vex;
    int **mar;
    int *temp;
public:
    mygraph(int v)
    {
        vex=v;
        mar = new int* [vex];
        temp = new int[vex];
        int i;
        int j;
        for (i = 0; i < vex; i++)
            mar[i] = new int[vex];
        for (i = 0; i < vex; i++)
            for (j = 0; j < vex; j++)
                cin >>mar[i][j];
        for ( i = 0; i < vex; i++)
            temp[i] = 0;
    }
    void dfs(int pp)
    {
        temp[pp] = 1;
        cout << pp << " ";
        int i;
        for (i = 0; i < vex; i++)
            if (!temp[i]&& mar[pp][i])
                dfs(i);
    }
    void dfs()
    {
        int i;
        for (i=0; i <vex; i++)
        {
            if (temp[i] == 0)
                dfs(i);
        }
    }
    void bfs(int op)
    {
        int ws, us;
        int is, ks;
        int *adj= new int[vex];
        queue <int>qq;
        for (is = 0; is < vex; is++)
            temp[is] = 0;
        for (op=0; op < vex; op++)
        {
            if (!temp[op])
            {
                temp[op] = 1;
                qq.push(op);
                while (!qq.empty())
                {
                    us = qq.front();
                    cout << us << ' ';
                    qq.pop();
                    for (is = 0; is < vex; is++)
                        adj[is] = -1;
                    int posd = 0;
                    for (ks = 0; ks < vex; ks++)
                    {
                        if (mar[us][ks])
                        {
                            adj[posd++] = ks;
                        }
                    }
                    is= 0;
                    for (ws= adj[is]; ws >= 0; ws = adj[is++])
                    {
                        if (temp[ws] == 0)
                        {
                            temp[ws] = 1;
                            qq.push(ws);
                        }
                    }
                }
            }
        }
    }
    void bfs()
    {
        bfs(0);
    }
};

int main()
{
    int t;
    cin >> t;
    while (t--)
    {
        int ve;
        cin >>ve;
        mygraph ou(ve);
        ou.bfs();
        cout << endl;
    }
}

 DS图—图非0面积

#include<bits/stdc++.h>
#include<queue>
using namespace std;

#define N 500
#define P 4

class mygraph
{
private:
    int vex;
    int **mar;
    int *temp;
public:
    mygraph(int v)
    {
        vex=v;
        mar = new int* [vex];
        temp = new int[vex];
        int i;
        int j;
        for (i = 0; i < vex; i++)
            mar[i] = new int[vex];
        for (i = 0; i < vex; i++)
            for (j = 0; j < vex; j++)
                cin >>mar[i][j];
        for ( i = 0; i < vex; i++)
            temp[i] = 0;
    }
    void dfs(int pp)
    {
        temp[pp] = 1;
        cout << pp << " ";
        int i;
        for (i = 0; i < vex; i++)
            if (!temp[i]&& mar[pp][i])
                dfs(i);
    }
    void dfs()
    {
        int i;
        for (i=0; i <vex; i++)
        {
            if (temp[i] == 0)
                dfs(i);
        }
    }
    void bfs(int op)
    {
        int ws, us;
        int is, ks;
        int *adj= new int[vex];
        queue <int>qq;
        for (is = 0; is < vex; is++)
            temp[is] = 0;
        for (op=0; op < vex; op++)
        {
            if (!temp[op])
            {
                temp[op] = 1;
                qq.push(op);
                while (!qq.empty())
                {
                    us = qq.front();
                    cout << us << ' ';
                    qq.pop();
                    for (is = 0; is < vex; is++)
                        adj[is] = -1;
                    int posd = 0;
                    for (ks = 0; ks < vex; ks++)
                    {
                        if (mar[us][ks])
                        {
                            adj[posd++] = ks;
                        }
                    }
                    is= 0;
                    for (ws= adj[is]; ws >= 0; ws = adj[is++])
                    {
                        if (temp[ws] == 0)
                        {
                            temp[ws] = 1;
                            qq.push(ws);
                        }
                    }
                }
            }
        }
    }
    void bfs()
    {
        bfs(0);
    }
};


class mapd
{
public:
    int mygraph[N][N];
    int m,n;
    mapd(int mval,int nval)
    {
        m=mval;
        n=nval;
        int i;
        int j;
        for(i=0; i<=m+1; i++)
            for(j=0; j<=n+1; j++)
                mygraph[i][j]=0;
        for(i=1; i<=m; i++)
            for(j=1; j<=n; j++)
                cin >> mygraph[i][j];
    }
    void bfs()
    {
        int xx;
        int yy=0;
        xx=0;
        int i;
        queue<int> Q1,q2;
        Q1.push(xx);
        q2.push(yy);
        mygraph[xx][yy]=1;
        int ndx[P]= {-1,0,1,0};
        int ndy[P]= {0,1,0,-1};
        while(!Q1.empty())
        {
            for(i=0; i<P; i++)
            {
                if(mygraph[Q1.front()+ndx[i]][q2.front()+ndy[i]]==0&&Q1.front()+ndx[i]>=0&&Q1.front()+ndx[i]<=m+1&&q2.front()+ndy[i]>=0&&q2.front()+ndy[i]<=n+1)
                {
                    q2.push(q2.front()+ndy[i]);
                    Q1.push(Q1.front()+ndx[i]);
                    mygraph[Q1.front()+ndx[i]][q2.front()+ndy[i]]=1;
                }
            }
            Q1.pop();
            q2.pop();
        }

    }
    void display()
    {
        int mum;
        mum=0;
        int i;
        int j;
        for(i=0; i<=m; i++)
            for(j=0; j<=n; j++)
                if(mygraph[i][j]==0)
                    mum++;
        cout<<mum<<endl;
    }
};

int main()
{
    int t;
    cin >> t;
    while(t--)
    {
        int o;
        int p;
        cin >> o >> p;
        mapd mgraph(o,p);
        mgraph.bfs();
        mgraph.display();
    }
}

(2)图联通与生成树:

 DS图—图的连通分量

#include<bits/stdc++.h>
using namespace std;

#define P 0
int csou;
int num;
string mian[56];
int mar[56][56];
int temp[56];


int xunzhao(string asou)
{
    for (int i = 0; i < num; i++)
        if (asou == mian[i])
            return i;
}

void Dfs(int id)
{
    temp[id] = 1;
    int j;
    for(j=0; j<num; j++)
        if (mar[id][j] && !temp[j])
        {
            Dfs(j);
        }
}

int main()
{
    int t;
    cin >> t;
    while (t--)
    {
        csou= P;
        cin >> num;
        int i;
        int j;
        for (i = 0; i < num; i++)
            cin >> mian[i];
        for (i = 0; i < num; i++)
            temp[i] = 0;
        for (i = 0; i < num; i++)
            for (j = 0; j < num; j++)
                mar[i][j] = 0;
        int ll;
        cin >> ll;
        while (ll--)
        {
            string as, bs;
            cin >> as >> bs;
            int at;
            int bt;
            at=xunzhao(as);
            bt=xunzhao(bs);
            mar[at][bt]=1;
            mar[bt][at]=1;
        }
        for(i=0; i<num; i++)
            if (!temp[i])
            {
                temp[i] = 1;
                csou=csou+1;
                Dfs(i);
            }

        for (i = 0; i < num; i++)
        {
            cout << mian[i];
            if (i == num - 1)
                cout << endl;
            else
                cout << " ";
        }
        for (i = 0; i < num; i++)
            for (j = 0; j < num; j++)
            {
                cout << mar[i][j];
                if (j == num - 1)
                    cout << endl;
                else
                    cout << " ";
            }
        cout << csou << endl << endl;
    }
}

 村村通工程(Prim算法)

#include<bits/stdc++.h>
using namespace std;


struct c
{
    int adj;
    int money =0x3f3f3f3f;
} c[108];

struct p
{
    int he;
    int ta;
};

struct v
{
    int indexx;
    string data;
} v[108];


class tu
{
private:
    int mar[108][108];
    int vnumber;
    int sum = 0;
    vector<p> path;
public:
    tu()
    {
        int i;
        int j;
        int e;
        for(i=0; i<108; i++)
            for(j=0; j<108; j++)
                mar[i][j]=0;
        cin >> vnumber;
        for (i = 0; i < vnumber; i++)
        {
            cin >> v[i].data;
            v[i].indexx = i;
        }
        cin >> e;
        for (i = 0; i < e; i++)
        {
            string tai;
            string hea;
            int costmoney;
            cin >> tai >> hea >> costmoney;
            mar[get(tai)][get(hea)] = costmoney;
            mar[get(hea)][get(tai)] = costmoney;
        }
        string begine;
        cin >> begine;
        prim(get(begine));
    }

    int get(string &f);
    void prim(int begin);

};

void tu::prim(int begin)
{
    int i;
    int j;
    for (i = 0; i < vnumber; i++)
        if (!mar[begin][i])
            c[i].adj = begin;
        else
        {
            c[i].adj=begin;
            c[i].money=mar[begin][i];
        }
    c[begin].money = 0;
    for (i = 1; i < vnumber; i++)
    {
        int min;
        int nextt;
        min=0x3f3f3f3f;
        for (j = 0; j < vnumber; j++)
            if (min > c[j].money && c[j].money)
            {
                nextt = j;
                min = c[j].money;
            }
        c[nextt].money = 0;
        p passpass;
        passpass.he= c[nextt].adj;
        passpass.ta=nextt;
        path.push_back(passpass);
        sum+=min;
        for (j = 0; j < vnumber; j++)
            if (mar[nextt][j] && c[j].money > mar[nextt][j])
            {
                c[j].adj=nextt;
                c[j].money=mar[nextt][j];
            }
    }
    cout << sum << endl;
    for (auto &it: path)
        cout << v[it.he].data << ' ' << v[it.ta].data << ' ' << mar[it.he][it.ta] << endl;
}


int tu::get(string &f)
{
    int i;
    for (i = 0; i < vnumber; i++)
        if (v[i].data== f)
            return i;
}

int main()
{
    int t;
    tu res;
}

村村通工程(Kruskal算法)

#include<bits/stdc++.h>
using namespace std;

class ed
{
public:
    string ta;
    string he;
    int quan;
};

bool cpr(ed rhs, ed lhs)
{
   return rhs.quan<lhs.quan;
}

class tu
{
private:
    ed *edg;
    string* data;
    int vnum;
    int enume;
    int *temp;
public:
    int find(string str)
    {
        int i;
        for (i = 0; i <vnum; i++)
            if (str == data[i])
                return i;
    }
    void k();
    tu(int v)
    {
        int i;
        int j;
        vnum=v;
        data = new string[vnum];
        for (i = 0; i < v; i++)
            cin >> data[i];
        cin >> enume;
        edg = new ed[enume];
        for (i = 0; i < enume; i++)
            cin >> edg[i].he >> edg[i].ta >> edg[i].quan;
        temp = new int[vnum];
        for ( j = 0; j < v; j++)
            temp[j] = j;
    }
};

void tu::k()
{
    int j;
    int wsum;
    int indexx;
    indexx=0;
    wsum=0;
    ed*res = new ed[vnum - 1];
    int i;
    sort(edg, edg + enume, cpr);
    for (i = 0; indexx != vnum-1&& i < enume; i++)
    {
        if (temp[find(edg[i].he)] != temp[find(edg[i].ta)])
        {
            res[indexx++] = edg[i];
            wsum = edg[i].quan+wsum;
        }
        int cmp = temp[find(edg[i].ta)];
        for (j = 0; j < vnum; j++)
        {
            if (temp[j] == cmp)
                temp[j] = temp[find(edg[i].he)];
        }
    }
    for (i = 0; i < vnum - 1; i++)
    {
        if (temp[i] != temp[i + 1])
        {
            cout << "-1" << endl;
            return;
        }
    }
    cout << wsum << endl;
    for (i = 0; i <vnum - 1; i++)
    {
        if (find(res[i].he) >=find(res[i].ta))
            cout << res[i].ta << " " << res[i].he << " " << res[i].quan << endl;
        else
            cout << res[i].he<< " " << res[i].ta << " " << res[i].quan << endl;
    }

}

int main()
{
    int vsoul;
    cin>>vsoul;
    tu res(vsoul);
    res.k();
}

(3)拓扑排序与最短路径:

DS图—图的最短路径(无框架)

#include<bits/stdc++.h>
using namespace std;
#define P 1001
class tu
{
private:
    int mar[1001][1001];
    vector<int> pathh[1001];
    int dis[1001];
    string ver[1001];
    int vnum;
    string begin;
    int vir[1001];
public:
    tu(int v)
    {
        int u;
        int w;
        for(u=0; u<P; u++)
            for(w=0; w<P; w++)
                mar[u][w]=0;
        for(w=0; w<P; w++)
            dis[w]=0;
        for(u=0; u<P; u++)
            vir[u]=0;
        vnum=v;
        int i;
        for(i=0; i<v; i++)
            cin>>ver[i];
        int j;
        for(i=0; i<v; i++)
            for(j=0; j<vnum; j++)
                cin>>mar[i][j];
        cin>>begin;
    }
    void display()
    {
        d();
        int i;
        for(i=0; i<vnum; i++)
        {
            if(i== gin(begin))
                continue;
            if(!dis[i])
                cout<<begin<<'-'<<ver[i]<<"--1"<<endl;
            else
            {
                cout<<begin<<'-'<<ver[i]<<'-'<<dis[i]<<"----[";
                for(auto&it:pathh[i])
                    cout<<ver[it]<<' ';
                cout<<"]\n";
            }
        }
    }
    int gin(string &dw);
    void d();
};

void tu::d()
{
    int beginin;
    int i;
    int j;
    beginin=gin(begin);
    for(i=0; i<vnum; i++)
    {
        if(mar[beginin][i]!=0)
        {
            dis[i]=mar[beginin][i];
            pathh[i].push_back(beginin);
            pathh[i].push_back(i);
        }
    }
    vir[beginin]=1;
    for(i=0; i<vnum-1; i++)
    {
        int mind;
        mind=0x3f3f3f3f;
        int min;
        for(j=0; j<vnum; j++)
            if(dis[j]!=0&&dis[j]<mind&&vir[j]==0)
            {
                mind=dis[j];
                min=j;
            }
        vir[min]=1;
        for(j=0; j<vnum; j++)
            if(vir[j]==0&&(!dis[j]||mind+mar[min][j]<dis[j])&&mar[min][j]!=0)
            {
                dis[j]=mind+mar[min][j];
                pathh[j]=pathh[min];
                pathh[j].push_back(j);
            }
    }
}
int tu::gin(string &dw)
{
    int i;
    for(i=0; i<vnum; i++)
        if(dw==ver[i])
            return i;
}
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int vsu;
        cin >> vsu;
        tu mytu(vsu);
        mytu.display();
    }
}

图综合练习--拓扑排序

#include<iostream>
using namespace std;

#define o 612

bool done[612];
int mar[612][612];

int find(int num)
{
    int i;
    int j;
    for (j =0; j <num; j++)
    {
        int temp;
        temp=0;
        for (i = 0; i < num; i++)
        {
            if (mar[i][j] != 0)
                temp=1;
        }
        if (  done[j] == false&&temp == 0)
        {
            done[j]=true;
            return j;
        }
    }
}

int main()
{
    int t;
    cin >> t;
    while (t--)
    {
        int num;
        cin >> num;
        int u;
        u=num;
        int i;
        int j;
        for (j =0; j <num; j++)
            done[j]=false;
        for (i = 0; i < o; i++)
            for (j = 0; j < o; j++)
                mar[i][j]=0;
        for (i = 0; i < num; i++)
            for (j = 0; j < num; j++)
                cin >> mar[i][j];
        int as;
        for (as = 0; as < num; as++)
        {
            int p;
            p=find(u) ;
            cout << p<< " ";
            for (i=0; i<num; i++)
                mar[p][i] = 0;
        }
        cout << endl;
    }
}

货币套汇(图路径)

#include<bits/stdc++.h>
using namespace std;

int num;

double minw = 1e-7;

int mum;

void fuloyide( double **dval)
{
    double **res = new double *[num];
    int i;
    for (i = 0; i < num; i++)
    {
        int j;
        res[i] = new double[num];
        for (j = 0; j < num; j++)
        {
            if (i != j)
            {
                if(dval[i][j]>minw)
                    res[i][j]=dval[i][j];
                else
                    res[i][j]=minw;
            }
            else
                res[i][j] = 1.0;
        }
    }
    int j;
    int k;
    for (k = 0; k < num; k++)
        for (i = 0; i < num; i++)
            for (j = 0; j < num; j++)
                if (res[i][j] < res[i][k] * res[k][j])
                    res[i][j] = res[i][k] * res[k][j];

    for (i = 0; i < num; i++)
    {
        if (res[i][i] > 1.0)
        {
            cout << "YES" << endl;
            return;
        }
    }
    cout << "NO" << endl;
}

int gin(string str, string m[])
{
    int i;
    for (i = 0; i < num; i++)
        if (m[i] == str)
            return i;
}

int main()
{
    string m[575];
    int t;
    cin >> t;
    while (t--)
    {
        cin >> num >> mum;
        double** dv = new double* [num];
        int j;
        int i;
        for (i = 0; i < num; i++)
            cin >> m[i];
        for (i = 0; i < num; i++)
        {
            dv[i] = new double[num];
            for (j = 0; j < num; j++)
            {
                if(i==j)
                    dv[i][j]=1.0;
                else
                    dv[i][j]=minw;
            }
        }
        for (i = 0; i < mum; i++)
        {
            double av;
            string p;
            string q;
            cin >> p >> av >> q;
            dv[gin(p, m)][gin(q, m)] = av;
        }
        fuloyide(dv);
    }
}

关键路径-STL版

#include<bits/stdc++.h>
using namespace std;

#define P 612

int main()
{
    int num;
    int ln;
    cin >>num;
    cin>>ln;
    int as[612][612];
    int rudu[612];
    int i;
    int j;
    for(i=0; i<P; i++)
        for(j=0; j<P; j++)
            as[i][j]=0;
    for(i=0; i<P; i++)
        rudu[i]=0;
    for(i = 0; i < ln; i++)
    {
        int vv1;
        int vv2;
        int vum;
        cin>>vv1>>vv2>>vum;
        rudu[vv2]=rudu[vv2]+1;
        as[vv1][vv2] = vum;
    }

    int mysort[P];
    queue<int> myq;
    for(i = 0; i < num; i++)
    {
        if(rudu[i] == 0)
        {
            myq.push(i);
            rudu[i] = -1;
        }
    }
    int count;
    count=0;
    while(!myq.empty())
    {
        int nono =myq.front();
        myq.pop();
        mysort[count++] = nono;
        for(i = 0; i < num; i++)
        {
            if(as[nono][i]!=0)
                rudu[i]=rudu[i]-1;
            if(rudu[i] == 0)
            {
                myq.push(i);
                rudu[i] = -1;
            }
        }
    }
    int endd;
    int begin;
    endd = mysort[num-1];
    begin = mysort[0];
    int early[P];
    int last[612];
    for(j=0; j<P; j++)
        early[j]=-1;
    for(j=0; j<612; j++)
        last[j]=99999;
    early[begin] = 0;
    for(i = 1; i < num; i++)
    {
        int temp;
        int pos;
        pos=0;
        temp = mysort[i];
        for(j = 0; j < num; j++)
        {
            int numc;
            numc=early[j] + as[j][temp];
            if(as[j][temp]!=0)
                pos = max(numc,pos);
        }
        early[temp] = pos;
    }
    for(i = 0; i < num; i++)
    {
        cout<<early[i]<<" ";
    }
    cout<<endl;
    last[endd] = early[endd];
    for(i = num-2; i >= 0; i--)
    {
        int ppos;
        int flag;
        ppos=99999;
        flag=mysort[i];
        for(j = 0; j < num; j++)
        {
            int mumc;
            mumc=last[j] - as[flag][j];
            if(as[flag][j]!=0)
                ppos = min(mumc,ppos);
        }
        last[flag] = ppos;
    }
    for(i = 0; i < num; i++)
    {
        cout<<last[i]<<" ";
    }
    cout<<endl;
}

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值