Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- pair<int,int> Unos(vector<vector<int>>&matrica) { //funkcija vraca par broja redova i kolona
- vector<int>temp;
- int brojRedova = 0, brojKolona = 0, broj = 0;
- do{
- cout << "Unesite broj redova (>=3) -> ";
- cin >> brojRedova;
- cout << "Unesite broj kolona (>=3) -> ";
- cin >> brojKolona;
- } while (brojRedova<3 || brojKolona<3);
- for (size_t i = 0; i < brojRedova; i++){
- matrica.push_back(temp);
- for (size_t j = 0; j < brojKolona; j++){
- cout << "Unesite " << i * brojKolona + j + 1 << ". element matrice -> ";
- cin >> broj;
- matrica[i].push_back(broj);
- }
- }
- return make_pair(brojRedova, brojKolona);
- }
- pair<int, int>PronadjiMaksimum(vector<vector<int>>matrica, int red, int kolona) { //funkcija vraca par koji je pozicija lokalnog maxa
- int pocetniRed, pocetnaKolona;
- while (true){
- pocetniRed = red;
- pocetnaKolona = kolona; // u sljedecem djelu provjeravamo da li postoji susjedni clan,i ako postoji da li je veci od P
- if (red-1>=0){
- if (matrica[red-1][kolona]>matrica[red][kolona]){
- red--;
- continue;
- }
- if (kolona + 1<matrica[0].size()){
- if (matrica[red - 1][kolona + 1] > matrica[red][kolona]) {
- red--;
- kolona++;
- continue;
- }
- }
- }
- if (kolona+1<matrica[0].size()){
- if (matrica[red][kolona + 1] > matrica[red][kolona]) {
- kolona++;
- continue;
- }
- }
- if (red + 1 < matrica.size()) {
- if (kolona + 1<matrica[0].size()){
- if (matrica[red+1][kolona + 1] > matrica[red][kolona]) {
- red++;
- kolona++;
- continue;
- }
- }
- if (matrica[red + 1][kolona ] > matrica[red][kolona]) {
- red++;
- continue;
- }
- if (kolona - 1 >= 0) {
- if(matrica[red + 1][kolona-1]> matrica[red][kolona]) {
- red++;
- kolona--;
- continue;
- }
- }
- }
- if (kolona - 1 >= 0) {
- if (matrica[red][kolona - 1]> matrica[red][kolona]) {
- kolona--;
- continue;
- }
- }
- if (red - 1 >= 0) {
- if (kolona - 1 >= 0) {
- if (matrica[red - 1][kolona - 1] > matrica[red][kolona]) {
- kolona--;
- red--;
- continue;
- }
- }
- }
- if(pocetniRed==red&&kolona==kolona)
- return make_pair(red, kolona);
- }
- }
- pair<int, int> UnesiPoziciju(int brojRedova,int brojKolona) { // funkcija vraca red i kolonu pozicije
- int red, kolona;
- do{
- cout << "Unesite broj reda pozicije -> ";
- cin >> red;
- cout << "Unesite broj kolone pozicije -> ";
- cin >> kolona;
- } while (red<0 || red >= brojRedova || kolona<0 || kolona >= brojKolona);
- return make_pair(red, kolona);
- }
- int main() {
- vector<vector<int>>matrica;
- int brojRedova,brojKolona,red,kolona;
- tie(brojRedova, brojKolona)=Unos(matrica);
- tie(red, kolona) = UnesiPoziciju(brojRedova,brojKolona); //unosimo p
- tie(red, kolona) = PronadjiMaksimum(matrica, red, kolona); //ponovno koristenje red i kolona za dobivanje pozicije maksimuma
- cout << "Lokalni maksimum je -> "<<matrica[red][kolona]<<" (" << red << "," << kolona << ")" << endl;
- system("pause>0");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement