অ্যাডজাসেন্সি লিস্ট ইনপুট নিয়ে ইন-ডিগ্রি ও আউট-ডিগ্রির সংখ্যা প্রিন্ট করতে হবে। ইনডিগ্রি ঠিকমতো প্রিন্ট করতে পারছি না।

আমার কোডঃ

#include <cstdio>
#include <vector>
using namespace std;
#define MAX 1000000
vector<int>edge[MAX];
vector<int>cost[MAX];
int out[MAX];

int main()
{
    int i,n,e,j,k,m;
    scanf("%d%d",&n,&e);

    //for input as one-diectional graph
    for(i=0;i<e;i++){
        int x,y;
        scanf("%d %d",&x,&y);
        edge[x].push_back(y);
    }

    for(i=1;i<=n;i++)
    {
        k=edge[i].size();
        out[i]=k;
        printf("for %d::",i);
        printf("outdegree %d\n",out[i]);
    }

    /*
    Here i for each node which in degree is being calculated,
    m for each node in the list,j for each element for a node.
    */

    for(i=1;i<=n;i++)
    {
        int co=0;
        for(m=0;m<n;m++){
            int p=edge[m].size();

            for(j=0;j<p;j++)
            {
                if(edge[m][j]==i)
                    co++;
            }
        }
        printf("\nin-degree for %d=%d\n ",i,co);
    }

    return 0;
}

asked 30 Mar, 14:46

nishat's gravatar image

nishat
717

edited 31 Mar, 03:41

Mosharraf%20Hosain's gravatar image

Mosharraf Hosain ♦
53118


out degree প্রিন্ট করার জন্য edge[x].size() প্রিন্ট করলেই হবে ।

in-degree বের করার ক্ষেত্রে আপনার index এর সমস্যা ছিলো । এইটা কাজ করার কথা । আপনি node i = 1 থেকে শুরু করছিলেন আবার node m = 0 থেকে শুরু করছিলেন । আপনাকে n, m = 0 বা n, m = 1 থেকে শুরু করতে হবে ।

for(int i = 1; i <= 5; i++)
{
        int co = 0;
        for(int m = 1; m <= 5; m++){
            int p = g[m].size();

            for(int j = 0; j < p; j++)
            {
                if(g[m][j] == i)
                    co++;
            }
        }
        printf("\nin-degree for %d=%d\n ",i,co);
}

এই কাজটা আপনি এই ভাবেও করতে পারেন,

    // 1->2
    // 2->3
    // 3->1
    // 5->1
    // 4->1
    // 1->3

    g[1].push_back(2);
    g[2].push_back(3);
    g[3].push_back(1);

    g[5].push_back(1);
    g[4].push_back(1);
    g[1].push_back(3);

    for(int i = 1; i <= 5; i++) 
    {
        int sz = g[i].size();
        cout << "sz: " << sz << endl;
        for(int j = 0; j < sz; j++)
        {
            cout << "g: " << g[i][j] << endl;
            in[g[i][j]]++;
        }
    }

    cout << "out degree:" << endl;
    for(int j = 1; j <= 5; j++) {
        cout << "out degree of " << j << " is " << in[j] << endl;
    }

ধন্যবাদ :)

permanent link

answered 30 Mar, 15:01

menon's gravatar image

menon
4.4k329

edited 31 Mar, 10:17

Mosharraf%20Hosain's gravatar image

Mosharraf Hosain ♦
53118

অত্যন্ত দুঃখিত। আমি out degree print করেছি।in dregree তে সমস্যা হচ্ছে।প্রশ্নে ভুল লিখে ফেলেছি।এডিট করলাম :(

(30 Mar, 15:15) nishat

উত্তর এডিট করে দিলাম @nishat

(31 Mar, 06:12) menon

অসংখ্য ধন্যবাদ :)

(01 Apr, 03:07) nishat

@nishat উত্তত সঠিক হয়ে থাকলে সেটা সঠিক হিসাবে মার্ক করুন । ধন্যবাদ :)

(01 Apr, 06:01) menon
Your answer
toggle preview

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Markdown Basics

  • *italic* or _italic_
  • **bold** or __bold__
  • link:[text](http://url.com/ "title")
  • image?![alt text](/path/img.jpg "title")
  • numbered list: 1. Foo 2. Bar
  • to add a line break simply add two spaces to where you would like the new line to be.
  • basic HTML tags are also supported

Question tags:

×13
×8
×7
×2
×1

question asked: 30 Mar, 14:46

question was seen: 192 times

last updated: 01 Apr, 06:01