کد الگوریتم های پر کاربرد

  • شروع کننده موضوع
  • #1

مهدی

کاربر فوق‌حرفه‌ای
ارسال‌ها
1,112
امتیاز
7,384
نام مرکز سمپاد
علامه‌حلی
شهر
تهران
مدال المپیاد
کامپیوتر
دانشگاه
دانشگاه تهران. :دی
رشته دانشگاه
آمار. :دی
تو این تاپیک کد الگوریتم های پرکاربرد رو میتونید بزارید تا ملت بیان استفاده کنن
منم مثل اینایی که میخوان پروژه رو افتتاح کنن با کلنگ :-" دو سه تا از الگوریتم های معروف رو میذارم کدشون رو

کد:
#include <iostream>
#include <algorithm>

using namespace std;

const int N = 100;
int n, m;
bool mark[N];
bool g[N][N];
void dfs(int v){
     mark[v] = true;
     for(int i = 1; i <= n; i++)
             if(mark[i] == 0 && g[v][i] == 1)
                           dfs(i);
}
int main(){
    cin >> n >> m;
    for(int i = 0; i < m; i++){
            int a, b;
            cin >> a >> b;
            g[a][b] = g[b][a] = true;
    }
    dfs(1);
    if(mark[n] == 1)
                  cout << "Yes" << endl;
    else
                  cout << "No" << endl;
    system("pause");
}
دی اف اس

کد:
#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

const int N = 100;

vector <int>adj[N];
bool mark[N];
int depth[N];

int main(){
    int n, m;
    cin >> n >> m;
    for(int i = 0; i < m; i++){
	   int a, b;
	   cin >> a >> b;
	   adj[a].push_back(b);
	   adj[b].push_back(a);
    }
    int que[N], h = 0, t = 1;
	que[0] = 1;
	mark[1] = true;
    for(int h = 0;h < t; h++){
        int v = que[h];
	    for(int i = 0; i < adj[v].size(); i++){
	        int u = adj[v][i];
	        if(!mark[u]){
		      depth[u] = depth[v] + 1;
		      mark[u] = true;
		      que[t++] = u;
            }
        }
    }
    cout << depth[n] << endl;
    system("pause");
}
بی اف اس

الان خوابم میاد ... حسش بود بازم میام کداشون رو میذارم :-"
شمام هر الگوریتمی که به نظرتون به کار میاد رو میتونید بذارید ;;)
 

Anita H

کاربر فوق‌حرفه‌ای
ارسال‌ها
571
امتیاز
2,987
نام مرکز سمپاد
حلّی ۲
شهر
تهران
سال فارغ التحصیلی
1396
مدال المپیاد
کامپیوتری بودم
دانشگاه
شریف
رشته دانشگاه
کامپیوتر
پاسخ : کد الگوریتم های پر کاربرد

#عدم خاک خوری :-"
دایسترا
خروجیشم مسیر مینیموم بین راس 1 و n هست!
کروسکال
خروجیش اندیسای یالایی که تو ام اس تی هستن!
پریم
iامین خروجیش شماره ی بابای راس iام توی ام‌اس‌تی ـعه
KMP x:
دو تا رشته میگیره تعداد تکرار رشته دومیه تو رشته اولیه رو میپاچه بیرون
 

kerpoocoder

کاربر نیمه‌حرفه‌ای
ارسال‌ها
240
امتیاز
1,058
نام مرکز سمپاد
علامه حلی غیر چینی
شهر
کرمون
مدال المپیاد
یه کم
دانشگاه
شهید باهنر کرمان
رشته دانشگاه
CS &amp; Math
پاسخ : کد الگوریتم های پر کاربرد

این همه الگوریتم کاربردی وجود داره چرا این قدر کم کد اینجاست بذارین کد هاشونو!
+
ی نکته مهم این که کدهاتونو رو توی این بنده خدا paste.ubuntu.com پیست نکنید لینکش برای مدت محدودی فقد کد شما رو توش نگه می داره بعدش کدتونو پاک می کنه مثلا یک سال پس راه های بهتری رو انتخاب کنید.

اینم کد LIS از (O(nlogk که علاوه بر LIS یکی از کوتاهترین زیر-آرایه ها رو هم چاپ می کنه.[nb]n طول آرایه اصلی و k طول زیرآرایه بیشینه [/nb]

کد:
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
const int Size=1e5;
int minlst[Size],array[Size],dp[Size],n,lis=0;
int bin_search(int f,int l,int onsor,int* c)
{
	if(f==l-1)
		return f;
	if(onsor>c[f+(l-f)/2])
		return bin_search((l-f)/2+f,l,onsor,c);
	else 
		return bin_search(f,l-(l-f)/2,onsor,c);
}
void inp()
{
	cin>>n;
	for(int i=1;i<=n;i++)
		cin>>array[i];
}
void DPalg()
{
	for(int i=1;i<=n;i++)
	{
		int k=bin_search(0,lis+1,array[i],minlst)+1;
		dp[i]=k;
		minlst[k]=array[i];
		lis=max(lis,k);
	}
}
void show()
{
	vector<int>out;
	cout<<lis<<endl;
	for(int i=n;i>0;i--)
		if(dp[i]==lis)
		{
			out.push_back(i);
			lis--;
		}
	for(int i=out.size()-1;i>=0;i--)
		cout<<array[out[i]]<<" ";
	cout<<endl;
}
int main()
{
	inp();
	DPalg();
	show();
	return 0;
}

دور اویلری
کد:
#include<iostream>
#include<vector>
using namespace std;
const int M=1e4;
int n,m;
vector<int>g[M],tour,stack;
bool yalmark[M][M];
void dfs(int v)
{
	stack.push_back(v);
	for(int i=0;i<g[v].size();i++)
		if(!yalmark[v][g[v][i]])
		{
			yalmark[v][g[v][i]]=yalmark[g[v][i]][v]=1;
			dfs(g[v][i]);
		}
	tour.push_back(stack.back());
	stack.pop_back();
}
int main()
{
	cin>>n>>m;
	for(int i=0;i<m;i++)
	{
		int u,v;
		cin>>v>>u;
		g[v].push_back(u);
		g[u].push_back(v);
	}
	dfs(1);
	for(int i=0;i<tour.size();i++)
		cout<<tour[i]<<" ";
	cout<<endl;
	return 0;
}

مجموعه راس های برشی
کد:
#include<iostream>
#include<vector>
using namespace std;
#define M 100000
int n,m,MinBack[M],parent[M];
vector<int>g[M];
bool mark[M],IsCutVer[M];
void dfs(int v,int d)
{
	mark[v]=true;
	MinBack[v]=d;
	int child=0,minback=d;
	for(int i=0;i<g[v].size();i++)
	{
		if(!mark[g[v][i]])
		{
			parent[g[v][i]]=v;
			child++;
			dfs(g[v][i],d+1);
			if(MinBack[g[v][i]]>=d)
				IsCutVer[v]=true;
		}
		if(g[v][i]!=parent[v])
			minback=min(minback,MinBack[g[v][i]]);
	}
	MinBack[v]=minback;
	if(v==1 && child==1)
		IsCutVer[1]=false;
}
int main()
{
	cin>>n>>m;
	for(int i=0;i<m;i++)
	{
		int u,v;
		cin>>u>>v;
		g[v].push_back(u);
		g[u].push_back(v);
	}
	dfs(1,0);
	cout<<"Cut Vertices are: ";
	for(int i=1;i<=n;i++)
		if(IsCutVer[i])
			cout<<i<<' ';
	return 0;
}
 
  • لایک
امتیازات: Mim
بالا