資料結構與演算法——在一定範圍內求最少標記點
思路就是每到一個點的時候,不要首先想著把它標記,而是應該先看前面的那個點是否已經標記:
如果前面的那個點沒有標記,並且該點後面的點到前面的那個點的距離大於R,則將當前點標記;
如果前面的那個點沒有標記,並且該點後面的點到前面的那個點的距離小於R,則不標記當前點;
每次都不想標記當前點,總是想著標記後面的那個點也可以;當實在是不行的時候再標記當前點;
虛擬碼:
if(i = 1)
if(X(i+1)- X(i) > R)
將Xi標記book[i] == 1
else
i++
else if(i<N)
if(book[i-1] == 0 && X(i+1)- X(i-1)>R )
將Xi標記book[i] == 1
else if(book[i-1] == 0 && X(i+1)- X(i-1)<R)
i++;
else if (i == N && X(i)- X(i-1)> R)
將Xi標記book[i] == 1
/*************************************************************************
> File Name: 224.cpp
> Author:
> Mail:
> Created Time: 2015年12月14日 星期一 21時38分27秒
************************************************************************/
#include <iostream>
#include <vector>
using namespace std;
void input_data(int * number, int * r, vector<int> & x, vector<int> &book)
{
cout << "輸入點的個數:";
cin >> *number;
cout << "輸入半徑的大小: ";
cin >> *r;
cout << "輸入每個點的位置: ";
int i = 0;
int val;
while(i != *number){
cin >> val;
x.push_back(val);
book.push_back(0);
cin.get();
i++;
}
}
void output_data(int * number, int *r, vector<int> & x, vector<int> &book)
{
cout << "N = " << *number << endl;
cout << "r = " << *r << endl;
cout << "X = ";
for (vector<int>::iterator pos = x.begin(); pos != x.end(); ++pos){
cout << *pos << " ";
}
cout << endl;
for (vector<int>::iterator pos = book.begin(); pos != book.end(); ++pos){
cout << *pos << " ";
}
cout << endl;
}
void solve(int * number, int * r, vector<int> & x, vector<int> & book)
{
int i = 0;
while(i < x.size()){
if(i == 0){
if(x[i+1] - x[i] > *r){
book[i] = 1;
}
}
else if(i < *number-1){
if(book[i-1] == 0 && x[i+1]-x[i-1] > *r){
book[i] = 1;
}
}
else if (i == *number-1 && x[i]-x[i-1] > *r){
book[i] = 1;
}
i++;
}
cout << "the result is :";
for (i = 0; i < book.size(); ++i){
if (book[i] == 1)
cout << x[i] << " ";
}
cout << endl;
}
int main()
{
int N, R;
vector<int> X;
vector<int> book;
input_data(&N, &R, X, book);
//output_data(&N, &R, X, book);
solve(&N, &R, X, book);
return 0;
}
相關文章
- UPDATE查詢結果範圍內的資料
- 《資料結構與演算法分析》筆記資料結構演算法筆記
- 資料結構與演算法-資料結構(棧)資料結構演算法
- js生成一定範圍內的隨機整數JS隨機
- 由資料範圍反推演算法複雜度以及演算法內容演算法複雜度
- 在 JavaScript 中學習資料結構與演算法JavaScript資料結構演算法
- 資料結構與演算法資料結構演算法
- 在指定範圍內生成隨機數隨機
- 資料結構:初識(資料結構、演算法與演算法分析)資料結構演算法
- 資料結構與演算法-學習筆記(16)資料結構演算法筆記
- 資料結構與演算法學習筆記01資料結構演算法筆記
- 資料結構與演算法-學習筆記(二)資料結構演算法筆記
- 資料結構與演算法課程筆記(二)資料結構演算法筆記
- 資料結構和演算法-隨機數範圍擴大 使用rand7()構造rand10()資料結構演算法隨機
- 資料結構與演算法:圖形結構資料結構演算法
- 【Java資料結構與演算法筆記(一)】常見排序演算法及面試考點總結Java資料結構演算法筆記排序面試
- 請求支援,我們被非結構化資料包圍了!
- 資料結構筆記——演算法資料結構筆記演算法
- 資料結構與演算法知識點總結(1)陣列與連結串列資料結構演算法陣列
- 【JavaScript 演算法與資料結構】JavaScript演算法資料結構
- 資料結構與演算法03資料結構演算法
- 演算法與資料結構——序演算法資料結構
- 資料結構與演算法——概述資料結構演算法
- 資料結構與演算法-堆資料結構演算法
- 資料結構與演算法02資料結構演算法
- 資料結構與演算法(1)資料結構演算法
- 資料結構與演算法——排序資料結構演算法排序
- 資料結構與演算法——字串資料結構演算法字串
- 資料結構與演算法(java)資料結構演算法Java
- 資料結構與演算法 - 串資料結構演算法
- 【資料結構與演算法】bitmap資料結構演算法
- 資料型別範圍資料型別
- int/double資料範圍
- 資料結構與演算法之線性結構資料結構演算法
- 資料結構與演算法分析 讀書筆記(樹)資料結構演算法筆記
- 資料結構與演算法-連結串列資料結構演算法
- 資料結構與演算法知識點總結(4)各類排序演算法資料結構演算法排序
- 資料結構與演算法知識點總結(5)查詢樹資料結構演算法