⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 好最近公共祖先正常742bilca.cpp

📁 设计一个算法
💻 CPP
字号:
#include "iostream.h"
#include "fstream.h"
#include "stdio.h"
int complect(int i,int c[],int m)//判断深度
{
	
	if(c[i]!=0)
	{
		m++;
		complect(c[i],c,m);		
	}
	else 
		return m;
}
int inver(int i,int k,int k1,int a[])//同一层的数
{
	if(k<k1)
	{
		k++;
		inver(a[i],k,k1,a);
	}
	else  return i;
}
int output(int m,int n,int a[])//共同的祖先
{
	if(a[m]!=a[n])
		output(a[m],a[n],a);
	else return a[m];

}
void main()
{
	ifstream in("input.txt");
	if(in.fail())
	{
		cerr<<"the input is not exist!"<<endl;
		return ;
	}
	ofstream out("output.txt");
	int n;
	in>>n;
	int *a=new int[n+1];
	for(int i=0;i<n+1;i++)
		a[i]=0;
	int b[3];

	for(i=0;i<n;i++)
		{for(int j=0;j<=2;j++)		
			in>>b[j];
		a[b[1]]=a[b[2]]=b[0];
		}
	int m,c[2];
	int tt;
	in>>m;
    for(i=0;i<m;i++)
	{
		in>>c[0];
		in>>c[1];
		int t=0,t1=0;
		t=complect(c[0],a,t);
		t1=complect(c[1],a,t1);
		if(t<t1)
		{
			
			tt=inver(c[1],t,t1,a);
			if(c[0]==tt)
                  out<<c[0]<<' '<<c[1]<<' '<<c[0];
			  else
				  out<<c[0]<<' '<<c[1]<<' '<<output(c[0],tt,a);
		}
		else
		{
			tt=inver(c[0],t1,t,a);
			if(c[1]==tt)
                  out<<c[0]<<' '<<c[1]<<' '<<c[1];
			else out<<c[0]<<' '<<c[1]<<' '<<output(c[1],tt,a);
		}
		out<<'\n';
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -