记忆存储游览数+由底向上求解,0分求助
查看原帖
记忆存储游览数+由底向上求解,0分求助
1110346
Suzumenoinu楼主2023/11/5 16:14
#include<iostream>
using namespace std;
//节点类型
struct listNode {
	int data;
	listNode* next;
	//创建一个节点
	listNode(int data1, listNode* next1 = nullptr) {
		data = data1;
		next = next1;
	}
};
//城市列表,存储每个城市最大的游览数
listNode* N[100000];
void appendNode(int, int);
//主函数
int main() {
	int n, m;
	cin >> n >> m;
	//初始化每个城市
	for (int i = 0; i < n; i++) {
		N[i] = new listNode(0);
	}
	int x, y;
	for (int i = 0; i < m; i++) {
		cin >> x >> y;
		appendNode(x,y-1);
	}
	N[0]->data = 1;
	N[0]->next = nullptr;
	cout << N[0]->data << endl;
	//从下向上计算
	for (int i = 1; i < n; i++) {
		int ab=0;
		listNode* p = nullptr;
		p = N[i]->next;
		while (p!=nullptr) {
			if ((N[(p->data) - 1]->data) >= ab) {
				ab = (N[(p->data) - 1]->data);
			}
			p = p->next;
		}
		N[i]->data = ab + 1;
		cout << N[i]->data << endl;
	}
	for (int i = 0; i < n; i++) {
		delete[]N[i];
	}
	return 0;
}
//在 N[i] 末尾添加一个结点, x 为 (i+1) 的前驱
void appendNode(int x, int i) {
	listNode* ptr = N[i];
	listNode* ptr1 = nullptr;
	while (ptr->next!=nullptr) {
		ptr = ptr->next;
	}
	ptr->next = new listNode(x);
}
2023/11/5 16:14
加载中...