Eccolo, comunque i simboli cambiano, a volte è un cuoricino, a volte un rombo, ...
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <iomanip>
using namespace std;
bool griglia [9][9];
char mat [9][9];
int dimensione;
void DisponiNavi() {
    srand(time(NULL));
    for (int i = 1; i < 10; ++i) {
        for(int j = 1; j < 10; ++j) {
            griglia[i][j] = false;
        }
    }
    int navi = 0;
    while (navi < 20) {
        griglia [rand()%9+1][rand()%9+1] = true;
        ++navi;
    }
}
void Crea() {
    for (int m = 1; m <= 9; ++m) {
        for (int n = 1; n <= 9; ++n) {
            mat[m][n] = '.';
        }
    }
}
void Stampa() {
    int capo = 0;
    for (int m = 1; m <= 9; ++m) {
        for (int n = 1; n <= 9; ++n) {
            cout<<setw(3)<<mat[m][n];
            ++capo;
            if (capo%9 == 0)
                cout<<endl<<endl;
        }
    }
}
bool MettiBarcaOrizz() {
    int k;
    dimensione = rand() % 4 + 1; //fin quì ci siamo. scegli una dimensione tra 1 e 4.
    bool barcaPosizionata = false;
    for (int i = 1; i < 10 && !barcaPosizionata; ++i)
    {
        for(int j = 1; j < 10 && !barcaPosizionata; ++j)
        {
            //controllo x ogni punto
            if(j + dimensione > 9)
                continue;  //scarta posizioni che mandano l'index fouri dalla riga
            bool collisione = false;
            for(k = j; k < j + dimensione && !collisione; k++)
            {
                if(griglia[i][k] == true)
                {
                    collisione = true;
                }
            }
            if(!collisione)
            {
                for(k = j; k < j + dimensione; k++)
                {
                    griglia[i][k] = true; //piazzamento barca
                }
                barcaPosizionata = true;
            }
        }
    }
    
}
bool MettiBarcaVert() {
    int k;
    dimensione = rand() % 4 + 1; //fin quì ci siamo. scegli una dimensione tra 1 e 4.
    bool barcaPosizionata = false;
    for (int i = 1; i < 10 && !barcaPosizionata; ++i)
    {
        for(int j = 1; j < 10 && !barcaPosizionata; ++j)
        {
            //controllo x ogni punto
            if(i + dimensione > 9)
                continue;  //scarta posizioni che mandano l'index fouri dalla riga
            bool collisione = false;
            for(k = i; k < i + dimensione && !collisione; k++)
            {
                if(griglia[k][j] == true)
                {
                    collisione = true;
                }
            }
            if(!collisione)
            {
                for(k = i; k < i + dimensione; k++)
                {
                    griglia[k][j] = true; //piazzamento barca
                }
                barcaPosizionata = true;
            }
        }
    }
    
}
int main () {
    int TIRI = 10;
    int riga, colonna;
    Crea();
    Stampa();
    DisponiNavi();
    MettiBarcaOrizz();
    MettiBarcaVert();
    cout<<"Hai 10 tiri a disposizione"<<endl;
    for (int tiriFatti = 1; tiriFatti <= TIRI; ++tiriFatti) {
        cout<<"Inserisci la riga: ";
        cin>>riga;
        cout<<"Inserisci la colonna: ";
        cin>>colonna;
        if (griglia[riga][colonna]) {
            cout<<"Bravo"<<endl;
            ++TIRI;
            cout<<"Hai ancora "<<TIRI-tiriFatti<<" tiri a disposizione"<<endl;
            mat[riga][colonna] = 'X';
            Stampa();
        }
        else{
            cout<<"Acqua"<<endl;
            cout<<"Hai ancora "<<TIRI-tiriFatti<<" tiri a disposizione"<<endl;
            mat[riga][colonna] = 'O';
            Stampa();
        }
    }
    cout<<endl;
    system("PAUSE");
}
comunque l'ho dichiarata doppia perchè con i char stampo i puntini, i cerchi e le X, con i bool metto le navi (almeno questa era l'idea...)