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

شروع موضوع توسط مهدی ‏2014/11/5 در انجمن المپیاد كامپيوتر

  1. مهدی

    مهدی کاربر فوق حرفه ای

    ارسال‌ها:
    1,088
    امتیازات:
    +6,598 / -140
    نام مرکز سمپاد:
    علامه‌حلی
    شهر:
    تهران
    دانشگاه:
    دانشگاه تهران. :دی
    رشته دانشگاه:
    آمار. :دی
    تو این تاپیک کد الگوریتم های پرکاربرد رو میتونید بزارید تا ملت بیان استفاده کنن
    منم مثل اینایی که میخوان پروژه رو افتتاح کنن با کلنگ :-" دو سه تا از الگوریتم های معروف رو میذارم کدشون رو

    کد:
    #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");
    }
    
    بی اف اس

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

    sajjad.senator77 کاربر فعال

    ارسال‌ها:
    45
    امتیازات:
    +252 / -15
    نام مرکز سمپاد:
    حلی 1+1
    شهر:
    تهران
    پاسخ : کد الگوریتم های پر کاربرد

    کد الگوریتم LIS :

    چون بلد نبودم اینجا کد بزارم ی جا دیگه گذاشتم اینم لینکش

    http://paste.ubuntu.com/9284649/
     
    • لایک لایک x 2
  3. Anita H

    Anita H کاربر حرفه ای

    ارسال‌ها:
    568
    امتیازات:
    +2,912 / -42
    نام مرکز سمپاد:
    Hell(i) 2
    شهر:
    تهران
    سال فارغ التحصیلی:
    96
    دانشگاه:
    شریف
    رشته دانشگاه:
    مهندسی کامپیوتر
    پاسخ : کد الگوریتم های پر کاربرد

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

    kerpoocoder کاربر نیمه حرفه ای

    ارسال‌ها:
    240
    امتیازات:
    +1,210 / -157
    نام مرکز سمپاد:
    علامه حلی غیر چینی
    شهر:
    کرمون
    دانشگاه:
    شهید باهنر کرمان
    رشته دانشگاه:
    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;
    }
     
    • لایک لایک x 1