我是靠谱客的博主 缥缈高跟鞋,最近开发中收集的这篇文章主要介绍无优先级运算问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#include <iostream> #include <fstream> #include <queue> #include <cmath> using namespace std; const int MAX = 50; int num[MAX]; //输入的数 int n, m; //整数个数,目标数 char op[] = {' ', '+', '-', '*', '/'}; class Node { public: int dep; //当前层 int *num; //输入的数 bool *flag; //是否已经用过 int *oper; //1--'+', 2--'-', 3--'*', 4--'/' Node(int d) { dep = d; num = new int[n+1]; flag = new bool[n+1]; oper = new int[n+1]; } //深度小的先出队列 bool operator < (const Node &node) const { return dep >= node.dep; } }; priority_queue<Node> q; //判断是否得到解 bool found(Node node) { int temp = node.num[1]; for(int i=1; i<node.dep; i++) switch(node.oper[i]) { case 1: temp += node.num[i+1]; break; case 2: temp -= node.num[i+1]; break; case 3: temp *= node.num[i+1]; break; case 4: temp /= node.num[i+1]; break; } return temp == m; } //向优先队列中加入活结点 void addNode(int numIndex, int oper, Node enode) { int dep = enode.dep + 1; Node now(dep); for(int i=1; i<=n; i++) { now.num[i] = enode.num[i]; now.flag[i] = enode.flag[i]; now.oper[i] = enode.oper[i]; } now.num[dep] = num[ numIndex ]; now.flag[dep] = true; now.oper[dep] = oper; q.push(now); } //输出结果 void out(Node node) { cout << "n最少无优先级运算次数为:" << node.dep-1 << endl; cout << "最优无优先级运算表达式为:" << endl; for(int i=1; i<node.dep; i++) cout << node.num[i] << op[ node.oper[i] ]; cout << node.num[i]; } bool search() { Node enode(0); for(int i=1; i<=n; i++) { enode.num[i] = 0; enode.flag[i] = false; enode.oper[i] = 0; } while(true) { if(found(enode)) { out(enode); return true; } else { for(int i=1; i<=n; i++) //数字 if(!enode.flag[i]) for(int j=1; j<=4; j++) //运算符 addNode(i, j, enode); } if(q.empty()) return false; else { enode = q.top(); q.pop(); } } } int main() { ifstream fin("无优先级运算.txt"); cout << "输入整数个数:"; fin >> n; cout << n << endl; cout << "输入目标数:"; fin >> m; cout << m << endl; cout << "输入各整数:n"; for(int i=1; i<=n; i++) { fin >> num[i]; cout << num[i] << " "; } if(!search()) cout << "No Solution!"; cout << endl; cout << endl; fin.close(); return 0; }

这里写图片描述

最后

以上就是缥缈高跟鞋为你收集整理的无优先级运算问题的全部内容,希望文章能够帮你解决无优先级运算问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部