程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> sgu-230 Weighings

sgu-230 Weighings

編輯:C++入門知識

sgu-230 Weighings


題目大意:

給你一個n個點,m條邊的有向圖,然後要你求出一條經過所有點的路徑,輸出第i個點是第幾個經過的。



解題思路:

話說這道題目我看了好久才看懂啊,畢竟英語差啊。。。。。

很水的一道題目,就是一遍拓撲排序就行了,沒什麼可講的了。。。


AC代碼:

#include 
#include 
#include 
#include 
#include 
#include 
#define MAX(a,b) ((a)>(b)?(a):(b))
#define MIN(a,b) ((a)>(b)?(b):(a))

using namespace std;
int n,m;
struct bian_
{
	int next;
	int num;
}bian[10010]={{0,0}};
int First[110]={0};
int hash[110]={0};
int du[110]={0};

inline void Add(int p,int q,int k)
{
	bian[k].next=First[p];
	bian[k].num=q;
	First[p]=k;
	return;
}

int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++)
	{
		int p,q;
		scanf("%d%d",&p,&q);
		Add(p,q,i);
		du[q]++;
	}
	int dui[110]={0};
	int duip=0;
	for(int i=1;i<=n;i++)
		if(du[i]==0) dui[++duip]=i;
	for(int i=1;i<=duip;i++)
	{
		int u=dui[i];
		for(int p=First[u];p!=0;p=bian[p].next)
		{
			du[bian[p].num]--;
			if(du[bian[p].num]==0)
				dui[++duip]=bian[p].num;
		}
	}
	if(duip

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved